c - 指针运算 : strange result in C programm

标签 c pointers

#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/

相关文章:

c - 查找包含 0 的完整矩形

c - 带匹配括号的正则表达式

c - recv 不会将整个消息保存在缓冲区中

c# - 如何使用udp从C#客户端与C服务器通信?

pointers - %s和%S之间的差异

c - 减去指针后的输出

c++ - 使用 strncpy 时出现异常

c - 如何从 Delphi 制作的 DLL 导入函数?

c - C 中的数组包含不正确的值

c - 如何访问使用双指针动态分配的结构的字符串成员