使用指针更改const变量值

时间:2013-08-24 08:56:06

标签: c

以下程序的输出在gcc上为50。 怎么可能因为x是常量变量而* p是x本身,因为p是指向x处的值的常量指针。 turbo c给编译器错误的地方。 这是一个未定义的行为吗?请解释一下。

#include<stdio.h>

int main()
{
    const int x = 25;
    int * const p = &x;
    *p = 2 * x;
    printf("%d", x);
    return 0;
}

2 个答案:

答案 0 :(得分:9)

可以更改它,但行为未定义,正如标准中提到的那样!

在c11下6.7.3

  

如果尝试通过使用具有非const限定类型的左值来修改使用const限定类型定义的对象,则行为未定义。如果尝试通过使用具有非volatile限定类型的左值来引用使用volatile限定类型定义的对象,则行为是未定义的。

答案 1 :(得分:3)

int * const p=&x;

这不是一个有效的程序。 &x的类型为const int *,但您将指针值分配给类型为int * const的对象:编译器必须发出警告并允许停止编译。