鱼C论坛

 找回密码
 立即注册
查看: 700|回复: 15

[已解决]语句中的实参看不懂

[复制链接]
发表于 2020-8-5 22:32:37 | 显示全部楼层 |阅读模式

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

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

x
#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--):怎么理解 括号里那么多参数怎么算,
还有最后的printf最后没有;为什么
最佳答案
2020-8-5 22:43:36
意思就是(x--,y++,x+y)作为第一个参数,里面的执行顺序从左到右依次为x--, x = 5, y++, y=8, 最后x+y=13作为func的第一个参数,接着z作为第二的参数,再对z = z+1的操作
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-8-5 22:38:22 | 显示全部楼层
本帖最后由 baige 于 2020-8-5 22:39 编辑

逗号的优先级是最低的,里面先执行x--然后x=5接着y++ , y= 8 , 然后x+y = 13 ()里面最后一个作为func的第一个参数, 第二个是z=8先传过去,在++
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-5 22:40:45 | 显示全部楼层
(x--,y++,x+y)也就是这个表达式等于13,然后func(13,8)得出的结果是21
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-5 22:43:36 | 显示全部楼层    本楼为最佳答案   
意思就是(x--,y++,x+y)作为第一个参数,里面的执行顺序从左到右依次为x--, x = 5, y++, y=8, 最后x+y=13作为func的第一个参数,接着z作为第二的参数,再对z = z+1的操作
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-5 22:44:16 | 显示全部楼层
printf()后面是需要逗号的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

x--不是那种先运算,再变化吗
要是先减不应该--x吗我自增自减理解差
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-5 22:47:53 | 显示全部楼层
本帖最后由 baige 于 2020-8-5 22:49 编辑

这跟运算符的优先级有关, 其中逗号的优先级是最低的,也就是逗号前面的语句先执行完才会去执行逗号后面的语句,
最后的结果也就是最后一个逗号后面的值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-5 22:51:42 | 显示全部楼层
https://fishc.com.cn/forum.php?m ... =%D3%C5%CF%C8%BC%B6
这里面有运算符的优先级的表
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-5 23:01:53 | 显示全部楼层
  1. #include <stdio.h>

  2. int func(int a, int b)
  3. {
  4.         int c;
  5.         c = a+b;
  6.         return c;
  7. }

  8. int main()
  9. {
  10.         int x = 6, y = 7, z = 8, r;
  11.         r = func((x--,y++,x+y),z--);
  12.         printf("这是表达式(x--,y++)的值:%d\n",(x--,y++));//最后结果是y++的值
  13.         printf("这是表达式(x--,y++,x+y)的值: %d\n",(x--,y++,x+y));//最后结果是x+y的值
  14.         printf("这是表达式(z--)的值: %d",(z--));//最后结果是z的值,在 z = z-1
  15.         return 0;
  16. }
复制代码

楼主看不懂,可以多编写程序试验,把表达式拆分出来,printf()一下他们的输出结果就像我上面写的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-5 23:02:05 | 显示全部楼层


我觉得我说的不够好,没理解我说的意思,比如for(表达式1;表达式2;i++){。。。。}这种表达式1赋初值,表达式2判断,运算语句之后到表达式3 ,i是运算后加1的。
可是(x--,y++,x+y),x--,y++不是运算过后才自增,自减吗
                    
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

用什么编写程序,我不知道用什么,之前找了个DC++6.0电脑自动删debug文件。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-5 23:03:50 | 显示全部楼层
这两个不是同一个概念,for(;;)这里是C语言的语法规定
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-5 23:05:54 | 显示全部楼层
dev就行吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-5 23:05:58 | 显示全部楼层
baige 发表于 2020-8-5 23:03
这两个不是同一个概念,for(;;)这里是C语言的语法规定

老师你用什么编写程序实验的我不知道用什么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-5 23:07:40 | 显示全部楼层
我一直用的dev
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-5 23:10:09 | 显示全部楼层
小甲鱼的C视频讲的挺详细的,你多看看理解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-12 05:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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