【发布时间】:2012-09-27 14:34:39
【问题描述】:
我遇到过这样的代码:
#include <stdio.h>
int main(void)
{
int a[5] = { 1, 2, 3, 4, 5};
int *ptr = (int*)(&a + 1);
int *ptr2 = (int*) &a;
ptr2 +=1 ;
printf("%d %d %d \n", *(a + 1),*(ptr - 1) ,*ptr2 );
return 0;
}
除了这一行之外,指针算法为我做了:
int *ptr = (int*)(&a + 1);
这是未定义的行为吗?
为什么我们在取消引用 *(ptr - 1) 时会得到 5?
【问题讨论】:
-
int a[5] = { 1, 2, 3, 4, 5,6 };是一件非常糟糕的事情! -
@jsn 我的错!问题中只有 5 个元素,我在这里复制代码之前做了一些奇怪的测试,我会更改它:) 但问题仍然存在。
标签: c pointers memory-address