-9
int *q,a[10]={1,2,3,4,5,6,7,8,9,0};
char *p;
p=(char*)a;  
p++;
q=(int*)p;
printf("\n%d",*q);

Please explain for me why display is 33554432

Paul
  • 26,170
  • 12
  • 85
  • 119

1 Answers1

4

Assuming we have 4-byte integers, stored in little-endian fashion (lowest byte first), the array is stored (in bytes) as:

01 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 ...etc.

p points to the second byte, and q points to the integer starting at that same place, so:

   00 00 00 02

since we're stored low-to-high, that integer is:

0x02000000

in hex, or 33554432 in decimal.

Paul Roub
  • 36,322
  • 27
  • 84
  • 93