使用指针更改const变量值
以下程序的输出在gcc上为50。 怎么可能因为x是常量变量而* p是x本身,因为p是指向x处的值的常量指针。 turbo c给编译器错误的地方。 这是一种未定义的行为吗? 请解释。
#include int main() { const int x = 25; int * const p = &x; *p = 2 * x; printf("%d", x); return 0; }
有可能改变它,但行为是未定义的,正如标准中提到的那样!
它在c11下6.7.3
如果尝试通过使用具有非const限定类型的左值来修改使用const限定类型定义的对象,则行为未定义。 如果尝试通过使用具有非volatile限定类型的左值来引用使用volatile限定类型定义的对象,则行为未定义。
int * const p=&x;
这不是一个有效的程序。 &x
的类型为const int *
但是您将指针值赋给int * const
类型的对象:编译器必须发出警告并允许停止编译。