m0_46081634 2021-09-13 19:58 采纳率: 75%
浏览 50
已结题

这个的运算流程是什么

#include<stdio.h>
int main( )
{
int a = 1 , b = 2 , c = 3 ;
printf( "%d,%d,%d,%d\n" , a = b = c , a = b == c , a == ( b = c ) , a == ( b == c ) ) ;
return 0 ;
}

  • 写回答

1条回答 默认 最新

  • qq_43396784 2021-09-13 21:19
    关注

    单条赋是从右向左运算,其他都是从左向右 括号优先级最高

    printf语句是从最后的一项开始运算的,即先算a == ( b == c ), 由于 b == c 为假 所以进行 a == 0运算由于 a = 1 所以结果为0

    再接着是a == ( b = c ) ,先算b = c 将c的值赋值给b 所以此时 b = 3 c = 3 a = 1,后计算 a == 3 得到假 所以结果为0

    再接着是a = b == c, 先算b == c 得到1 又将值赋值给a 但需要注意,此时运算还没结束,这个1 还没有向双引号中的%d替换

    最后计算 a = b = c, 得到 a = 3, b = 3, c = 3, d = 3, 此时开始将逗号后面的内容替换掉双引号中的%d
    得到 3,3,0,0

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 9月24日
  • 已采纳回答 9月16日
  • 创建了问题 9月13日