#include<cstdio>
int main(){
int a=10,b=20;
int *p=&a;
*(p-1)=100;
printf("%d, %d, %d\n",a,b,*(p-1));
// printf("%d, %d, %d\n",&a,&b,(p-1));
return 0;
}
为什么第一个 printf(第 6 行)显示不同的结果,而不管第二个(第 7 行)是否在注释中? 我正在使用 C 编译器(TDM-GCC 4.8.1 64 位)
最佳答案
p
不指向数组,因此表达式 *(p-1)
有 undefined behaviour .这意味着,一旦 *(p-1)=100
被执行,从技术上讲,程序可以以任何它喜欢的方式运行。
实践中可能发生的情况是您覆盖了堆栈上的一些内存,这可能会导致各种副作用。
如果你Valgrind您的代码,该工具将对此进行标记。
关于c - 指针运算 : strange result in C programm,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28128026/