使用指针更改const int的值

时间:2014-01-05 03:05:38

标签: c pointers const

我在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)??

2 个答案:

答案 0 :(得分:2)

修改const变量(直接或通过指针)调用未定义的行为。您可能无法在另一台计算机上获得相同的结果。

答案 1 :(得分:1)

在C标准中,mofiying常量是一种未定义的行为。这意味着任何事情都可能发生,这取决于您运行的机器和您使用的编译器。在某些情况下,常量被用在只读内存上,修改它的值会导致程序崩溃。

GCC编译器生成的错误的例子:

error: assignment of read-only location '* p'
  *p = 11;
     ^