printf("%d,%o",(a=a+a,a+b,b),a+'a'-'A')
第一个输出项应该怎么解释 是什么意思?
还有 printf("%d\n",strlen("\t\"\065\xff\n"));
输出项又应该怎么解释 是什么意思?
还有 if(i==(i/2)*2) 为什么会是奇数的意思?
还有还有 这个 int a[10]={1,2,3,4,5,6,7,8,9,0},*p;
p=a;
printf("%x\n",p+9);}
答案为什么会是194 不是0么?辛苦了 加点分
printf("%d,%o",(a=a+a,a+b,b),a+'a'-'A')
答案:2 悬赏:0 手机版
解决时间 2021-02-27 22:47
- 提问者网友:我的未来我做主
- 2021-02-27 19:04
最佳答案
- 五星知识达人网友:平生事
- 2021-02-27 20:14
问题好多啊!!
第一个输出项是逗号表达式,输出b的值;
strlen输出值为字符串长度,里边有转义字符,还有8进制数65和16进制数ff,输出结果应该是1+1+2+2+1;
i==(i/2)*2,因为奇数除以2会向下取整,i为奇数则i != (i/2)*2,if表达式为真;
最后一个输出,提示:输出格式如果为%d则为0。
第一个输出项是逗号表达式,输出b的值;
strlen输出值为字符串长度,里边有转义字符,还有8进制数65和16进制数ff,输出结果应该是1+1+2+2+1;
i==(i/2)*2,因为奇数除以2会向下取整,i为奇数则i != (i/2)*2,if表达式为真;
最后一个输出,提示:输出格式如果为%d则为0。
全部回答
- 1楼网友:蕴藏春秋
- 2021-02-27 21:23
首先,应该说明的是在不同的编译环境中结果是不一样的。
在vc++6.0中的规则: printf函数的执行顺序是由右到左的
举个例子1:
int a=65,b=20;
printf("%d,%d\n",b=a+1,a=a+1);
输出结果是:67,66
而不是:66,66
例子2:
int a=65,b=20;
printf ("%d,%d",b=a+1,b+1,a=a+1);
输出结果是:67,21
第一个%d与b=a+1替换 第二个%d与剩下的替换 顺序右到左
先算a=a+1=66 替换 第二个 %d
再算b+1 =21 替换 第二个 %d
再算b=a+1=67 替换 第一个 %d
例子3:
int a=65,b=20;
printf ("%d,%d",(b=a+1,b+1),b-5,a=a+1);
输出结果是:67,61
第一个%d与 括号里的 替换, 第二个%d与剩下的替换
括号优先级最高,先算括号里的,括号里内容相当于逗号表达式,顺序从左到右。
余下的顺序从右到左
先算b=a+1=66 替换 第一个 %d
再算b+1 =67 替换 第一个 %d
再算a=a+1=66 替换 第二个 %d
再算b-5 =61 替换 第二个 %d
这题的答案是20,142 过程与 例子3 相似
够详细了吧!
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯