CSC 172 DATA STRUCTURES
POINTERS
POINTERS int a, b; a = 7; b = 11;
POINTERS int a, b; a = 7; b = 11; a 7 b 11
POINTERS int a, b; a = 7; b = 11; a 7 b 11 x01b5 xf37a
int a, b; a = 7; b = 11; &a ; //the address of a a 7 b 11 x01b5 xf37a
int *p ; //declaring a pointer p x0427 a 7 b 11 x01b5 xf37a
int *p p = &a ; p x01b5 x0427 a 7 b 11 x01b5 xf37a
int *p p = &a ; int c = *p ; 7 x015b 7 11 c p x219b x0427 a b x01b5 xf37a
Function Calls Call by value – you get a copy of the data
swap1 (x, y ) int x, y ; { int temp ; temp = x ; x = y; y = temp; } swap2 (px, py ) int *px, *py;{ int temp ; temp = *px ; *px = *py; *py = temp; }
COMPUTER MEMORY: A BIG ARRAY
ADDRESS CONTENT x[0] x0000 x[1] x0001 x[2] x0002 . . . . . .
. . . x[1] = 5; . . . ADDRESS CONTENT x[0] x0000 x[1] x0001 5
. . . x[3] = x[1]; . . . ADDRESS CONTENT x[0] x0000 x[1] x0001 5
. . . x[4] = &(x[1]); . . . ADDRESS CONTENT x[0] x0000 x[1] x0001 5
. . . x[6] = *(x[4]); . . . ADDRESS CONTENT x[0] x0000 x[1] x0001 5
int x = 1; int y = 2; int *ip ; int z[10];
. . . int x = 1; int y = 2; int *ip ; int z[10]; x0bc1 x0bc1 1 x0bc2 2
. . . int x = 1; int y = 2; int *ip ; int z[10]; x0bc1 x0bc1 1 x0bc2 1 ip = &x; y = *ip; . . .
. . . int x = 1; int y = 2; int *ip ; int z[10]; x0bc1 x0bc1 1 x0bc2 x0bc1 x0bc1 1 x0bc2 x0bc4 x0bc3 x0bc4 ip = &x; y = *ip; *ip = 0 ; ip = &z[10]; . . .
Arrays are pointers
ARRAYS ARE POINTERS int a[3], *p; a x01b5 p x01b6 xf37a x01b7
ARRAYS ARE POINTERS int a[3], *p; p = &a[0]; a p x01b5 x01b5 x01b6 xf37a x01b7
ARRAYS ARE POINTERS int a[3], *p; p = &a[0]; p = a; // same a p x01b5 xf37a x01b7
ARRAYS ARE POINTERS a[0] = 13; *p = 13; 13 a p x01b5 x01b5 x01b6 xf37a
ARRAYS ARE POINTERS a[1] = 29; *(p+1) = 29; 13 29 a p x01b5 x01b5 xf37a x01b7
ARRAYS ARE POINTERS a[2] = 31; *(p+2) = 31; 13 29 31 a p x01b5 x01b5 xf37a 31 x01b7
int k; for(k=0;k<3;k++){ a[k] = k * k; } for (k=0;k<3;k++) *(p+k) = k * k ;