【发布时间】:2019-10-29 16:39:26
【问题描述】:
我正在寻找关于增加地址如何影响指针的解释。
我了解了 C 指针的工作原理以及如何通过考虑指针类型来完成指针的递增。还是没看懂下面的案例
int main()
{
int a[] = {1,2,3,4,5};
int *p = (int*)(&a+1);
printf("%d\n%d\n", *(a+1), *(p-1));
return 0;
}
我期待这条线
int *p = (int*)(&a+1);
使p指向数组a后面的地址,因此我期望输出:
2
就是a[1]
但输出是 unknown_number - 因为我不知道哪个 int 比 (&a+1) 落后 4 个字节@
而实际结果是:
2
5
为什么p 似乎直接指向了位于a 之后的内存?
我的困惑的根源是什么?
【问题讨论】:
-
删除
&。 -
另一个例子表明强制转换在 C 中几乎没有帮助。为什么强制转换?它消除了编译器给你的警告/错误。不要怀疑....
标签: c pointers memory memory-management pointer-arithmetic