【发布时间】:2016-10-07 05:37:00
【问题描述】:
考虑以下两种情况。 case1: 编译器错误 --> 错误: 只读变量‘x’的增量
#include<stdio.h>
main()
{
const int x=5;
printf("%d",++x);
}
case2:运行成功,输出为 6。为什么?
#include<stdio.h>
main()
{
const int x=5;
int *ptr=&x;
++(*ptr);
printf("%d",x);
}
【问题讨论】:
-
第二个导致未定义的行为。您使用指向非常量
int的指针来修改常量int。一个好的编译器应该警告它,如果没有,那么你应该打开更多警告。 -
警告:初始化会丢弃指针目标类型的限定符
-
所以 case2 应该是 int const *ptr=&x 以获得与 case1 相同的行为。