#include<stdio.h>
int main()
{
const int sum=100;
int *p=(int *)∑
*p=101;
printf("%d, %d",*p,sum);
return 0;
}
/*
output
101, 101
*/
p points to a constant integer variable, then why/how does *p manage to change the value of sum?
It’s undefined behavior – it’s a bug in the code. The fact that the code ‘appears to work’ is meaningless. The compiler is allowed to make it so your program crashes, or it’s allowed to let the program do something nonsensical (such as change the value of something that’s supposed to be const). Or do something else altogether. It’s meaningless to ‘reason’ about the behavior, since there is no requirement on the behavior.
Note that if the code is compiled as C++ you’ll get an error since C++ won’t implicitly cast away
const. Hopefully, even when compiled as C you’ll get a warning.