int main(int argc, char ** argv)
{
int a[5] = {1, 2, 3, 4, 5};
int *ptr = (int*)(&a + 1);
printf("%d, %d", *(a + 1), *(ptr - 1));
return 0;
}
这个程序打印出的结果应该是 2, 5。
因为在指针移位时,是以sizeof(T)(T是指针指向的类型)。
所以&a + 1移位时,移了 sizeof(a)个,也就是5 * 4(x86结构)=20个。
而在后边,ptr的类型为int* 所以,一次向后移4个字节,故结果是5.
{
int a[5] = {1, 2, 3, 4, 5};
int *ptr = (int*)(&a + 1);
printf("%d, %d", *(a + 1), *(ptr - 1));
return 0;
}
这个程序打印出的结果应该是 2, 5。
因为在指针移位时,是以sizeof(T)(T是指针指向的类型)。
所以&a + 1移位时,移了 sizeof(a)个,也就是5 * 4(x86结构)=20个。
而在后边,ptr的类型为int* 所以,一次向后移4个字节,故结果是5.