语句中的实参看不懂
#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:39 编辑
逗号的优先级是最低的,里面先执行x--然后x=5接着y++ , y= 8 , 然后x+y = 13 ()里面最后一个作为func的第一个参数, 第二个是z=8先传过去,在++ (x--,y++,x+y)也就是这个表达式等于13,然后func(13,8)得出的结果是21 意思就是(x--,y++,x+y)作为第一个参数,里面的执行顺序从左到右依次为x--, x = 5, y++, y=8, 最后x+y=13作为func的第一个参数,接着z作为第二的参数,再对z = z+1的操作 printf()后面是需要逗号的 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:49 编辑
这跟运算符的优先级有关, 其中逗号的优先级是最低的,也就是逗号前面的语句先执行完才会去执行逗号后面的语句,
最后的结果也就是最后一个逗号后面的值 https://fishc.com.cn/forum.php?mod=viewthread&tid=67664&highlight=%D3%C5%CF%C8%BC%B6
这里面有运算符的优先级的表 #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()一下他们的输出结果就像我上面写的 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++不是运算过后才自增,自减吗
baige 发表于 2020-8-5 23:01
楼主看不懂,可以多编写程序试验,把表达式拆分出来,printf()一下他们的输出结果就像我上面写的
用什么编写程序,我不知道用什么,之前找了个DC++6.0电脑自动删debug文件。。 这两个不是同一个概念,for(;;)这里是C语言的语法规定 dev就行吧 baige 发表于 2020-8-5 23:03
这两个不是同一个概念,for(;;)这里是C语言的语法规定
老师你用什么编写程序实验的{:5_102:}我不知道用什么 我一直用的dev 小甲鱼的C视频讲的挺详细的,你多看看理解
页:
[1]