未定义行为: 语言标准没有规定, 编译器自行决定的行为, 在不同的编译器上有时会有不同的结果.
- 1:
- int i=0; i=i++;
我们知道 i++ 会返回 i 之后再自增, 那么程序运行完 i 为多少?
解释一: i=i;i++; 先赋值再自增.
解释二: i++;i=i; 先自增再赋值.
- 2:
- int i=0,j=0;
- i=i+++j;
我们发现 i 和 j 中间有 3 个加号, 现在也有两种解释.
解释一: i=(i++)+j,i 先加上 j 再做自增.
解释二: i=i+(++j),j 先做自增再加上 i.
- 3:
- int i=0;
- printf("%d %d",++i,++i);
这是一个关于输出顺序的问题究竟输出的是, 1,2;2,1, 还是其他的?
- 4:
- const int a = 1;
- int *b = (int*)&a;
- *b = 2;
此时输出 a,a 的值为多少? 1 还是 2?
来源: http://www.bubuko.com/infodetail-2812854.html