sky*_*ion 7 c operators comma operator-keyword
我有一个简单的C代码和关于包含逗号(,)运算符的表达式的大混乱.
int main(){
int i=0,j=11,c;
c=i=j,++i;
printf("c=%d i=%d\n",c,i);
c=(i=j,++i);
printf("c=%d i=%d\n",c,i);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
上面的代码打印:
c=11 i=12
c=12 i=12
Run Code Online (Sandbox Code Playgroud)
我的问题是:
++比更优先,和=,为什么评价为表达做了左逗号?Vla*_*cow 10
赋值运算符的优先级高于逗号运算符.因此表达
c = i = j, ++i;
Run Code Online (Sandbox Code Playgroud)
相当于
( c = i = j ), ++i;
Run Code Online (Sandbox Code Playgroud)
根据C标准(6.5.17逗号运营商)
2逗号运算符的左操作数被计算为void表达式; 它的评估与右操作数之间存在一个序列点.然后评估右操作数; 结果有它的类型和价值.144)
在上面的表达式中,逗号运算符的结果被丢弃,但它具有增加的副作用i.
在这个表达中
c = ( i = j, ++i );
Run Code Online (Sandbox Code Playgroud)
由于使用括号,您更改了上述表达式的评估顺序.现在它相当于
c = ( ( i = j ), ++i );
Run Code Online (Sandbox Code Playgroud)
和变量根据上面列出的C标准的引用c获取表达式的值++i.
| 归档时间: |
|
| 查看次数: |
609 次 |
| 最近记录: |