修改常量变量(常量)

时间:2015-07-13 08:55:18

标签: c pointers const

我遇到了这段代码,我可以在其中修改const int变量的值!但这是一个错误还是一个黑客?请澄清一下:

#include<stdio.h>
int main(void)
{
    const int a = 10;
    int* ptr = &a;

    printf("\n value at ptr is  : [%d]\n",*ptr);
    printf("\n Address pointed by ptr  : [%p]\n",(unsigned int*)ptr);

    *ptr = 11;
    printf("\n value at ptr is  : [%d]\n",*ptr);
    printf("\n %d",a);

    return 0;
}

输出:

  ptr的

值是:[10]

     

ptr指出的地址:[0xbf9e614c]

     ptr的值是:[11]

     

11

1 个答案:

答案 0 :(得分:0)

不,这是undefined behaviour

如果尝试通过非const限定符指针修改const限定变量,则会调用UB。

引用C11,章节§6.7.3,类型限定符

  

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