我在gcc中编写了一个C程序,它给了我非常意想不到的输出。代码是:
#include<stdio.h>
int main(){
const int x=10;
int *p=&x;
*p=11;
printf("%d\n",*p);
printf("%d",x);
printf("\n%u\n",p);
printf("%u", &x);
}
这里的输出是:
11
10
37814068
37814068
为什么p和&amp; x给出相同的地址(37814068)但不同的值(5,10)??
答案 0 :(得分:2)
修改const
变量(直接或通过指针)调用未定义的行为。您可能无法在另一台计算机上获得相同的结果。
答案 1 :(得分:1)
在C标准中,mofiying常量是一种未定义的行为。这意味着任何事情都可能发生,这取决于您运行的机器和您使用的编译器。在某些情况下,常量被用在只读内存上,修改它的值会导致程序崩溃。
GCC编译器生成的错误的例子:
error: assignment of read-only location '* p'
*p = 11;
^