1 More on pointers
Example 1 – pass by value/reference int main(){ int p, q, r; p = 5; q = 6; r = Sum_1(p, q + 1); return 0; } void Sum_1(int a, int b){ int c; c = a + b; return c; } pqr abc
Example 2 – pass by value/reference int main(){ int *x,*y; int p = 5; int q = 6; x = &p; y = &q; Sum_1(p, y); return 0; } void Sum_1(int a, int *b){ int input; printf(“Enter an integer:”); scanf("%d", &input); *b = a + input; } xypq abinput
Example: Array and pointer int a[5]; int *p; int i = 0; for(i=0; i < 5; i++) a[i] = 3 + i; p= a; p = (int *)malloc(3 * sizeof(int)); a[0]a[1]a[2]a[3]a[4]p p[0]p[1]p[2] Heap (space for dynamically allocated data) Statically allocated data
Example 3: pointer to a struct int main(){ Student john; Student * john_ptr = &john; john.age = 20; john.gpa = 3.5; print_student_age_1(john); printf("gpa is %.1f\n", john.gpa); print_student_age_2(john_ptr); printf("gpa is %.1f\n", john.gpa); return 0; } void print_student_age_1(Student any){ printf("Age is %d\n", any.age); any.gpa = 2.0; } void print_student_age_2(Student * any){ printf("Age is %d\n", any->age); any->gpa = 2.0; } void print_student_age_3(const Student * any){ printf("Age is %d\n", any->age); any->gpa = 2.0; } john.agejohn.gpajohn_ptr any.ageany.gpa any
Example 4: malloc and structs Student * many = (Student *)malloc(3 * sizeof(Student)); many[0].age = 20; many[0].gpa = 3.5; //void print_student_info( Student class [ ], int count ); OR //void print_student_info( Student * class, int count ); print_student_info(___________________, 3 ); many[0].agemany[0].gpamany[1].agemany[1].gpamany[2].agemany[2].gpa many