崔铭1315 发表于 2020-8-5 22:32:37

语句中的实参看不懂

#include<stdio.h>       
int func(int a, int b)
{intc;
c=a+b;return c;
}
main()
{intx=6,y=7,z=8,r;
r=func((x--,y++,x+y),z--);printf("%d\n",r)
}
       


r=fun((x--,y++,x+y),z--):怎么理解 括号里那么多参数怎么算,{:5_94:}
还有最后的printf最后没有;为什么

baige 发表于 2020-8-5 22:38:22

本帖最后由 baige 于 2020-8-5 22:39 编辑

逗号的优先级是最低的,里面先执行x--然后x=5接着y++ , y= 8 , 然后x+y = 13 ()里面最后一个作为func的第一个参数, 第二个是z=8先传过去,在++

baige 发表于 2020-8-5 22:40:45

(x--,y++,x+y)也就是这个表达式等于13,然后func(13,8)得出的结果是21

baige 发表于 2020-8-5 22:43:36

意思就是(x--,y++,x+y)作为第一个参数,里面的执行顺序从左到右依次为x--, x = 5, y++, y=8, 最后x+y=13作为func的第一个参数,接着z作为第二的参数,再对z = z+1的操作

baige 发表于 2020-8-5 22:44:16

printf()后面是需要逗号的

崔铭1315 发表于 2020-8-5 22:45:44

baige 发表于 2020-8-5 22:38
逗号的优先级是最低的,里面先执行x--然后x=5接着y++ , y= 8 , 然后x+y = 13 ()里面最后一个作为func的 ...

x--不是那种先运算,再变化吗
要是先减不应该--x吗{:5_104:}我自增自减理解差

baige 发表于 2020-8-5 22:47:53

本帖最后由 baige 于 2020-8-5 22:49 编辑

这跟运算符的优先级有关, 其中逗号的优先级是最低的,也就是逗号前面的语句先执行完才会去执行逗号后面的语句,
最后的结果也就是最后一个逗号后面的值

baige 发表于 2020-8-5 22:51:42

https://fishc.com.cn/forum.php?mod=viewthread&tid=67664&highlight=%D3%C5%CF%C8%BC%B6
这里面有运算符的优先级的表

baige 发表于 2020-8-5 23:01:53

#include <stdio.h>

int func(int a, int b)
{
        int c;
        c = a+b;
        return c;
}

int main()
{
        int x = 6, y = 7, z = 8, r;
        r = func((x--,y++,x+y),z--);
        printf("这是表达式(x--,y++)的值:%d\n",(x--,y++));//最后结果是y++的值
        printf("这是表达式(x--,y++,x+y)的值: %d\n",(x--,y++,x+y));//最后结果是x+y的值
        printf("这是表达式(z--)的值: %d",(z--));//最后结果是z的值,在 z = z-1
        return 0;
}
楼主看不懂,可以多编写程序试验,把表达式拆分出来,printf()一下他们的输出结果就像我上面写的

崔铭1315 发表于 2020-8-5 23:02:05

baige 发表于 2020-8-5 22:51
https://fishc.com.cn/forum.php?mod=viewthread&tid=67664&highlight=%D3%C5%CF%C8%BC%B6
这里面有运算符 ...

我觉得我说的不够好,没理解我说的意思{:5_104:},比如for(表达式1;表达式2;i++){。。。。}这种表达式1赋初值,表达式2判断,运算语句之后到表达式3 ,i是运算后加1的。
可是(x--,y++,x+y),x--,y++不是运算过后才自增,自减吗
                  

崔铭1315 发表于 2020-8-5 23:03:40

baige 发表于 2020-8-5 23:01
楼主看不懂,可以多编写程序试验,把表达式拆分出来,printf()一下他们的输出结果就像我上面写的

用什么编写程序,我不知道用什么,之前找了个DC++6.0电脑自动删debug文件。。

baige 发表于 2020-8-5 23:03:50

这两个不是同一个概念,for(;;)这里是C语言的语法规定

baige 发表于 2020-8-5 23:05:54

dev就行吧

崔铭1315 发表于 2020-8-5 23:05:58

baige 发表于 2020-8-5 23:03
这两个不是同一个概念,for(;;)这里是C语言的语法规定

老师你用什么编写程序实验的{:5_102:}我不知道用什么

baige 发表于 2020-8-5 23:07:40

我一直用的dev

baige 发表于 2020-8-5 23:10:09

小甲鱼的C视频讲的挺详细的,你多看看理解
页: [1]
查看完整版本: 语句中的实参看不懂