有关const如何修改存储行为的说明

时间:2011-08-21 15:48:04

标签: c const

http://www.ideone.com/kRaMj

我在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 

1 个答案:

答案 0 :(得分:9)

该代码导致未定义的行为。
一旦使用指向它i的指针更改常量变量p的值,所有投注都将关闭,并且可能会看到任何行为。

未定义的行为意味着任何事情都可能发生,行为无法解释为标准,它定义了语言规则并未定义任何行为。