七月水水 发表于 2018-4-5 18:11:33

一个简单的加减乘除问题,求助啊

为什么
      int x;
        printf("%d\n", (x = 4 * 5, x * 5), x + 25);
等于100.
      int x;
        printf("%d\n", ((x = 4 * 5, x * 5), x + 25));
等于45.

ba21 发表于 2018-4-5 18:28:27

   printf("%d\n", (x = 4 * 5, x * 5), x + 25); //本来有2个%d的,你给打一个printf("%d,%d\n", (x = 4 * 5, x * 5), x + 25);

(x = 4 * 5, x * 5), x + 25 是2个表达式
起作用的只有 (x = 4 * 5, x * 5)
1,x = 4 * 5;
2,x*5 // 4*5 * 5 用%d输出 意思就是printf("%d\n", 4*5 * 5);



printf("%d\n", ((x = 4 * 5, x * 5), x + 25)); //这里1个%d((x = 4 * 5, x * 5), x + 25)
((x = 4 * 5, x * 5), x + 25)语句分来开就是
1,(x=4*5,x *5);
1.1x*5 //没用的东西
1.2x = 4*5;

2,x +25;    // 4*5 + 25 然后%d输出 意思就是printf("%d\n",4*5 + 25);

最后 x=4*5 = 20

七月水水 发表于 2018-4-5 18:56:44

为什么printf("%d\n", (23 ,45 , 7 ,3 ,45 , 23);
打印的是23呢

qq1242009750 发表于 2018-4-5 20:11:25

运算符        名称或含义                      使用形式        结合方向        说明

,                 逗号运算符        表达式,表达式,…          左到右        从左向右顺序运算
PS:逗号运算符默认返回最右边的数值

例如 :

int x = (1,2,3,4,5);

x的值为5.

BngThea 发表于 2018-4-5 20:53:18

逗号运算符最终的结果是最右边的值

printf的%d占位符直接从后面紧跟着的逗号后面取值

桃花飞舞 发表于 2018-4-5 22:56:06

我也不明白为什么第一个不是45而是100 。printf()函数的函数参数传递方向不是从右向左么,

wjp 发表于 2018-4-5 23:43:05

主要是printf参数和逗号运算符的问题
页: [1]
查看完整版本: 一个简单的加减乘除问题,求助啊