全部博文(930)
分类: LINUX
2009-09-25 12:13:05
|
运行下,你就发现p-q是4!!! why??? a是int类型嘛,p,q是char类型!! a+1-a是相当于一个int,4个char.
|
这个也是一样的,p-q就是2了.
|
int *ptr1 = (int*)(&a + 1);
&a 和 a 和 &a[0],都是同一个值,但是它们类型不同。 &a 的类型是:int (*)[5],指向5个int的指针。所以,&a加1,就等于加了5个int的长度。
printf的时候,减去1,则打印的是a[4]的值。
int *ptr2 = (int*)((int)a + 1);
同样,(int)a 和 &a 和 a 和 &a[0],都是同一个值,但是它们类型不同。 (int)a的类型是int,是一个整型。所以,加1就是直接加1。于是4个字节的int被截断了。
小端情况下,a按字节表示是: 0x01,0x00,0x00,0x00,0x02,0x00…… 地址值加1后,得到的int是0x00,0x00,0x00,0x02,连起来就是0x02000000。