11智能在线
新记
int i=0,j=3; while(i<=3&&j>2) { printf("%d,%d\n",i,j); j=3-i++; } 输出的结果是0,3 1,3对吧?
如果是的话,那么 j=3-i++; 就等价于j=3-i;i++;吧?但是不是说单目运算符优先级别高于双目运算符吗,那不是应该先i++了吗?
举报该文章
相关建议 2011-04-06
输出的结果是你写的。
单目运算符优先级别高于双目运算符
j=3-i++; 是先计算x=i++ 再计算j=3-x
但是这里面有个关键,就是
i++是一个表达式,它的值等于没有变化前的i
++i的值等于变化后的i
比如 i = 0 那么 (i++) = 0 (++i) = 1
所以:j=3-i++; 是先计算x=i++=0 但是i已经为1了 再计算j=3-x=3
这样就出来你所写的结果了。你是理解成了i++等于i变化后的值,所以有上面的疑惑
温馨提示:内容为网友见解,仅供参考
当前网址:
https://11.t2y.org/zz/psmq24747.html
其他看法
第1个回答 2011-04-06
使用gdb查看程序变量变化
第2个回答 2011-04-06
1 输出的结果是:
0,3
1,3
完全正确。
2 j=3-i++; 等价于j=3-i;i++;是对的。在j=3-i++; 这个语句中,i++优先于减运算,j=3-i++; 还等价于j=3-(i++);但i++表示先取i的值,再自加,因此参加减运算的是没有自加前的值。
相似回答
大家正在搜
相关问题
int n=0;while(++n<=3);printf("...
main() { int i=1,j=2,k=3; if(i...
main() { int i=1,j=2,k=3; if(i...
{int i=1,j=2,k=3;do{if(i%j==0&...
C语言问题有程序片段:int i=0;while(i++<=...
#include<stdio.h> main() { int...
main() {int i=10,j=0; do {j=j+...
main() {int i=0,j=1,k=2; if(!(...