140 likes | 243 Views
16.216 ECE Application Programming. Instructor: Dr. Michael Geiger Spring 2013 Lecture 16: Pointer arguments. Lecture outline. Announcements/reminders Program 5 due today Program 6 to be posted, due 3/20 Today’s class Review: Pointer arguments One dimensional arrays.
E N D
16.216ECE Application Programming Instructor: Dr. Michael Geiger Spring 2013 Lecture 16: Pointer arguments
Lecture outline • Announcements/reminders • Program 5 due today • Program 6 to be posted, due 3/20 • Today’s class • Review: Pointer arguments • One dimensional arrays ECE Application Programming: Lecture 16
Review: pointer arguments • Functions can only return one value • Arguments passed by value hold copy of value from calling function • Arguments passed by address hold location of variable in calling function • Argument type is pointer (e.g., int *ptr) • Allows function to change multiple values outside its scope • Dereference pointer to access “value being pointed to”: *ptr ECE Application Programming: Lecture 16
Review of scalar variables Variables (up to now) have: name type (int, float, double, char) address value N 28C4 (int) q 28C8 (float) r 28CC (float) 35 3.14 8.9 e.g. Name type address value N integer 28C4 35 q float 28C8 3.14 r float 28CC 8.9 ECE Application Programming: Lecture 19
Intro to Arrays Any single element of x may be used like any other scalar variable x[0] 45 3044 x[1] 55 3048 x[2] 25 304C x[3] 85 3050 x[4] 75 3054 printf("%d",x[3]); // prints 85 printf("%d",x[7]+x[1]); // prints 115 x[5] 65 3058 x[6] 100 305C x[7] 60 3060 ECE Application Programming: Lecture 19
Declaring Arrays Define an 8 element array: int x[8]; Elements numbered 0 to 7 Arrays in C always start with location 0 (zero based) The initial value of each array element is unknown (just like scalar variables) x[0] ? 3044 x[1] ? 3048 x[2] ? 304C x[3] ? 3050 x[4] ? 3054 x[5] ? 3058 x[6] ? 305C x[7] ? 3060 ECE Application Programming: Lecture 19
Declaring/defining Arrays double A[]={ 1.23, 3.14159, 2.718, 0.7071 }; A[0] 1.23 4430 You can also define the values to be held in the array and instruct the compiler to figure out how many elements are needed. Not putting a value within the [] tells the compiler to determine how many locations are needed. A[1] 3.14159 4438 A[2] 2.718 4440 A[3] 0.7071 4448 ECE Application Programming: Lecture 19
Working with Arrays (input) #include <stdio.h> void main(void){ int x[8]; int i; // get 8 values into x[] for (i=0; i<8; i++) { printf("Enter test %d:",i+1); scanf("%d",&x[i]); } } ECE Application Programming: Lecture 19
Working with Arrays (input) Sample run (user input underlined): Enter test 1:80Enter test 2:75Enter test 3:90Enter test 4:100Enter test 5:65Enter test 6:88Enter test 7:40Enter test 8:90 x[0] 80 x[1] 75 x[2] 90 x[3] 100 x[4] 65 x[5] 88 x[6] 40 x[7] 90 ECE Application Programming: Lecture 19
Pitfalls • What happens if we change previous code to: #include <stdio.h> void main(void){int x[8];inti; float sum, avg; // used later // get 8 values into x[] for (i=0; i<=8; i++) {printf("Enter test %d:",i+1);scanf("%d",&x[i]); } } ECE Application Programming: Lecture 19
Pitfalls (cont.) • Although x has 8 elements, x[8] is not one of those elements! • Compiler will not stop you from accessing elements outside the array • Must make sure you know the size of the array ECE Application Programming: Lecture 19
Example • What does the following program print? int main() { intarr[10]; inti; printf("First loop:\n"); for (i = 0; i < 10; i++) { arr[i] = i * 2; printf("arr[%d] = %d\n", i, arr[i]); } printf("\nSecond loop:\n"); for (i = 0; i < 9; i++) { arr[i] = arr[i] + arr[i + 1]; printf("arr[%d] = %d\n", i, arr[i]); } return 0; } ECE Application Programming: Lecture 19
Example solution First loop: arr[0] = 0 arr[1] = 2 arr[2] = 4 arr[3] = 6 arr[4] = 8 arr[5] = 10 arr[6] = 12 arr[7] = 14 arr[8] = 16 arr[9] = 18 Output continued: Second loop: arr[0] = 2 arr[1] = 6 arr[2] = 10 arr[3] = 14 arr[4] = 18 arr[5] = 22 arr[6] = 26 arr[7] = 30 arr[8] = 34 ECE Application Programming: Lecture 19
Next time • Math library • One dimensional arrays • Reminders: • Program 5 due 3/6 ECE Application Programming: Lecture 16