int *p, *q; q = p + 3; q = p - 5; |
Example 1:
int *p, *q; q = p + 3; // q = p + 3*4 (int = 4 bytes) q = p - 5; // q = p - 5*4 (int = 4 bytes) |
Example 2:
double *p, *q; q = p + 3; // q = p + 3*8 (doube = 8 bytes) q = p - 5; // q = p - 5*8 (doube = 8 bytes) |
Suppose we define an array a[10] and make a reference variable p point to the first element in the array:
int a[10]; // Array of 10 elements int *p; // Pointer variable (points to an integer) a[0] // First element of the array &a[0] // Address of the first element of the array p = &a[0]; // p points to the first element of array a |
*p is the array element a[0] *(p+1) is the array element a[1] *(p+2) is the array element a[2] ... and so on |
Graphically:
int a[10]; int *p; a[0] = ...; a[1] = ...; ... etc // Print array using array variable for ( i = 0; i < 10; i++ ) cout << a[i] << endl; // print array // Print array using pointer variable: (1) p = &a[0]; for ( i = 0; i < 10; i++ ) cout << *(p + i) << endl; // print array // Print array using pointer variable: (2) p = &a[0]; for ( i = 0; i < 10; i++ ) { cout << *p << endl; // print array p++; } // Print array using pointer variable: (3) p = &a[0]; for ( i = 0; i < 10; i++ ) { cout << *p++ << endl; // print array } |
Note:
|
This location is known as the address of the array
int a[10]; int *p; a[0] = ...; a[1] = ...; ... etc // Print array using array variable for ( i = 0; i < 10; i++ ) cout << a[i] << endl; // print array // Print array using pointer variable: (1) p = a; // a is same as &a[0] for ( i = 0; i < 10; i++ ) cout << *(p + i) << endl; // print array // Print array using pointer variable: (2) p = a; // a is same as &a[0] for ( i = 0; i < 10; i++ ) { cout << *p << endl; // print array p++; } // Print array using pointer variable: (3) p = a; // a is same as &a[0] for ( i = 0; i < 10; i++ ) { cout << *p++ << endl; // print array } |
int a[10], b[10]; int *p, *q; a[0] = ...; a[1] = ..., etc // Copy elements in array a to array b p = a; q = b; for ( i = 0; i < 10; i++ ) *q++ = *p++; |
Example:
int a[10]; int *p; p = a; p[4] // array notation used with a pointer variable |
int a[10]; int *p; p = a; p[4] means: *(p + 4) |
int a[20]; int i, *p; a[0] = 12; a[1] = 23; a[2] = 34; a[3] = 45; a[4] = 56; a[5] = 67; a[6] = 78; a[7] = 89; a[8] = 90; a[9] = 111; a[10] = 1012; a[11] = 1023; a[12] = 1034; a[13] = 1045; a[14] = 1056; a[15] = 1067; a[16] = 1078; a[17] = 1089; a[18] = 1090; a[19] = 1111; p = &a[4]; for ( i = 0; i < 10; i++ ) { cout << p[i] << " "; } |
The program will print elements a[4], a[5], ..., a[13]