怎么理解结果

qq_40858602 2017-12-30 10:41:16
下列程序的运行结果是 。
#include <stdio.h>
void main()
{
int x=10,y=20,z=30;
printf("%d,%d,%d,%d\n",x=y=z,x=y==z,x==(y=z),x==(y==z));
}
...全文
397 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
醉轩亭 2018-01-04
  • 打赏
  • 举报
回复
#include <stdio.h> void main() { int x=10,y=20,z=30; printf("%d,%d,%d,%d\n",x=y=z,x=y==z,x==(y=z),x==(y==z)); } 逗号运算符优先级是1,结合性是自左向右; 赋值运算符优先级是2 ;结合性是自右向左; 等于运算符优先级是9 ;结合性是自左向右; printf对参数的运算顺序是:自右向左;因此: 逆序来看: ④x==(y==z)的运算过程为:判断y的值与z的值是否相等,因此返回0; ③x==(y=z) 的运算过程为:把z赋值给y,则y=30;又因为x不等于20,所以返回0;因此结果为0; ②由于③中z的值赋给了y,因此,z==y为真,返回1;因此结果为1; ①简单的赋值,自右向左,因此结果为30;
weixin_41445971 2018-01-03
  • 打赏
  • 举报
回复
引用 7 楼 pearling的回复:
[quote=引用 6 楼 weixin_41445971 的回复:] 计算机运行结果是30,1,0,0 但我不理解为什么第二个为什么是1
逗号运算符是自右向左计算的 printf("%d,%d,%d,%d\n",x=y=z,x=y==z,x==(y=z),x==(y==z)); 在x==(y=z)这一步,将z赋值给了y,因此当执行x=y==z时,x取的就是y==z逻辑运算结果,因此是1 [/quote] 你是怎么理解i++跟++i 的?
自信男孩 2018-01-03
  • 打赏
  • 举报
回复
printf传参的顺序(压栈顺序)从右向左一次计算,因此顺序为:x == (y == z), x == (y=z), x = y==z, x = y = z;
赵4老师 2018-01-03
  • 打赏
  • 举报
回复
http://edu.csdn.net/course/detail/2344 C语言指针与汇编内存地址-一.代码要素
幻夢之葉 2018-01-02
  • 打赏
  • 举报
回复
引用 6 楼 weixin_41445971 的回复:
计算机运行结果是30,1,0,0 但我不理解为什么第二个为什么是1
涉及到运算符优先级,==(逻辑等)高于=(赋值),所以先计算==的结果,返回true,赋值给x化为int,1
pearling 2018-01-02
  • 打赏
  • 举报
回复
引用 6 楼 weixin_41445971 的回复:
计算机运行结果是30,1,0,0 但我不理解为什么第二个为什么是1
逗号运算符是自右向左计算的 printf("%d,%d,%d,%d\n",x=y=z,x=y==z,x==(y=z),x==(y==z)); 在x==(y=z)这一步,将z赋值给了y,因此当执行x=y==z时,x取的就是y==z逻辑运算结果,因此是1
weixin_41445971 2018-01-01
  • 打赏
  • 举报
回复
计算机运行结果是30,1,0,0 但我不理解为什么第二个为什么是1
rng_nb 2017-12-30
  • 打赏
  • 举报
回复
我的是30,30,0,0
IT小浪 2017-12-30
  • 打赏
  • 举报
回复
30,30,0,0
Alex_mercer_boy 2017-12-30
  • 打赏
  • 举报
回复
楼主,帖子上好像没有显示出结果啊
Alex_mercer_boy 2017-12-30
  • 打赏
  • 举报
回复
你的y==z 是个表达式啊!

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧