#include<stdio.h>
int main()
{
const int sum=100;
int *p=(int *)∑
*p=101;
printf("%d, %d",*p,sum);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
/*
产量
101,101
*/
p指向一个常数整数变量,那么为什么/ p如何设法改变sum的值?
这是未定义的行为 - 这是代码中的错误.代码"似乎有效"这一事实毫无意义.允许编译器使程序崩溃,或者允许程序执行无意义的操作(例如更改应该是const的某些内容的值).或者完全做其他事情.对行为进行"推理"是没有意义的,因为对行为没有要求.
请注意,如果代码编译为C++,您将收到错误,因为C++不会被隐式抛弃const.希望,即使编译为C,您也会收到警告.