const变量值是通过使用指针来更改的

  • 本文关键字:指针 变量值 const c
  • 更新时间 :
  • 英文 :


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

#include<stdio.h>
int main()
{
    const int x = 25;
    int * const p = &x;
    *p = 2 * x;
    printf("%d", x);
    return 0;
}

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

其在6.7.3 下的c11中

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

int * const p=&x;

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

最新更新