【发布时间】:2015-09-15 11:09:26
【问题描述】:
根据序列点的定义,序列点是“执行序列中的指定点称为序列点,保证之前的所有副作用都是完整的”
所以在下面的程序中,++ 运算符的所有副作用必须在转到 && 运算符的第二部分之前执行,即 i 应该递增到 1,因为 && 是一个序列点.
#include<stdio.h>
int main()
{
int i=0,a;
a=i++&&1;
printf("%d",a);
getchar();
return 0;
}
预期输出:
1 (
1&&1=1)
实际输出:
0
为什么i 在第二部分之前不增加?
使用三元运算符也可以得到相同的输出:
#include<stdio.h>
int main()
{
int i=0,a;
a=(i++)?1:0;
printf("%d",a);
getchar();
return 0;
}
三元运算符也是一个序列点。那么这不应该给出输出 1 而不是 0 吗?
【问题讨论】:
标签: c post-increment sequence-points