我在algogeeks论坛上发现了这个。任何人都可以解释i
的价值仍为0
,但*p
显示2
,但地址相同。
#include<stdio.h>
int main()
{
const int i = 0;
int * p ;
p = (int *) & i;
*p = 2;
printf("(i,p): %x %x \n",&i,p);
printf("(i,p): %d %d \n",i,*p);
}
该计划的输出是:
(i,p): bfdf6234 bfdf6234
(i,p): 0 2
答案 0 :(得分:9)
该代码导致未定义的行为。
一旦使用指向它i
的指针更改常量变量p
的值,所有投注都将关闭,并且可能会看到任何行为。
未定义的行为意味着任何事情都可能发生,行为无法解释为标准,它定义了语言规则并未定义任何行为。