为什么这个指针操作代码会产生33554432?

时间:2014-06-23 16:50:25

标签: c

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);

请为我解释为什么显示为33554432

1 个答案:

答案 0 :(得分:4)

假设我们有4字节整数,以little-endian方式存储(最低字节优先),数组存储(以字节为单位):

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

p指向第二个字节,q指向从同一位置开始的整数,因此:

   00 00 00 02

因为我们从低到高存储,所以整数是:

0x02000000

以十六进制表示,或33554432以十进制表示。