鱼C论坛

 找回密码
 立即注册
查看: 3772|回复: 2

[已解决]小白求助

[复制链接]
发表于 2017-12-26 23:28:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
char c = 'k';
        int i = 1,j = 2,k = 3;
        float x = 3e+5,y = 0.85;
        printf("%d,%d\n",!x*!y,!!!x);
        printf("%d,%d\n",x||i&&j-3,i<j&&x<y);
        printf("%d,%d\n",i==5&&c&&(j=8),x+y||i+j+k);

有个问题是最后一句的(j=8)这里怎么理解,在这里=应该是赋值的意思还是等于的意思?前面2已经赋值给j,现在(j=8)是又把8赋值给j吗?还是说j的值是2不等于8,然后输出0?
最佳答案
2017-12-27 09:11:07
i==5&&c&&(j=8)这里的(j=8) 是一条赋值语句,赋值语句意味着前面的 j=2 将被覆盖
这条语句的返回值就是8

但是因为 i==5&&c&&(j=8) 等价于
(i==5) && c && (j=8)
由于&&存在逻辑短路,也就是前面的为假后面的就不计算了
而 i==5 签好不成立,为假,所以 j =8 这条赋值语句被无情的忽视了
这整条语句的返回值为0,所以打印的结果就是0

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-12-27 00:48:01 | 显示全部楼层
i==5&&c&&(j=8)
5&&c&&8
就是这么理解
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-27 09:11:07 | 显示全部楼层    本楼为最佳答案   
i==5&&c&&(j=8)这里的(j=8) 是一条赋值语句,赋值语句意味着前面的 j=2 将被覆盖
这条语句的返回值就是8

但是因为 i==5&&c&&(j=8) 等价于
(i==5) && c && (j=8)
由于&&存在逻辑短路,也就是前面的为假后面的就不计算了
而 i==5 签好不成立,为假,所以 j =8 这条赋值语句被无情的忽视了
这整条语句的返回值为0,所以打印的结果就是0

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-19 19:12

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表