140 likes | 249 Vues
In this lecture from Dr. Michael Geiger's Spring 2013 course on ECE Application Programming, we delve into the concept of pointer arguments in C programming. The lecture outlines how functions can manage multiple values outside their scope using pointers, the mechanics of passing arguments by value vs. by address, and the basics of defining and manipulating one-dimensional arrays. Students are reminded of upcoming assignments and the importance of understanding the memory addresses and values associated with array elements.
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