我遇到了这段代码,我可以在其中修改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
答案 0 :(得分:0)
不,这是undefined behaviour。
如果尝试通过非const限定符指针修改const限定变量,则会调用UB。
引用C11
,章节§6.7.3,类型限定符
如果尝试通过使用非
const
限定类型的左值来修改使用const
限定类型定义的对象,则行为未定义。