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.
本文通过一个具体的C语言程序示例,详细解析了指针运算的原理,特别是指针与数组的关系及其在内存中如何进行偏移。通过该示例,读者可以了解指针算术如何影响内存地址,并掌握如何正确地使用指针来访问和操作数组元素。
1338

被折叠的 条评论
为什么被折叠?



