void main ( void )
{
int a[] = {22, 33,44};
‘a’ is a static array (or string) of 3 int, 22, 33, and 44.
int *x = a;
‘x’ is an int pointer, initialized to point to the same static array as ‘a’.
printf (" sizeof ( int )=% lu ", sizeof (int ));
Prints the number of bytes [4] required to represent an int type on this system.
printf ("x=%p, x [0]=% d\n", x, x [0]);
Prints the memory address where the int pointer ‘x’ is currently pointing[0x7fff29af6530],
then also prints the integer value [22] stored in the [4] bytes starting at that address.
(Note: ‘x[0]’ is the same as ‘*x’).
x = x + 2;
x [0x7fff29af6530]
+2 + 8 (or (2 * 4) or (2 * sizeof(int)))
---- ----------------
new x [0x7fff29af6538]
Advance the pointer ‘x’ 8 bytes.
The effect on ‘x’ is that it will now be pointing at its original memory address plus '(2 * sizeof(int))'
bytes. ‘a[2]’ resolves to the same location.
printf ("x=%p, x [0]=% d\n", x, x[0]);
Prints the memory address where the int pointer ‘x’ is currently pointing [0x7fff29af6538]
then also prints the integer value [44] stored in the [4] bytes starting at that address.
Hence; ‘x’ now resolves to the same address as ‘&a[2]’; and ‘*x’ resolves to the same number as ‘a[2]’.
}
solved Exam Q&A that I don’t understand [closed]