A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李永方 中级黑马   /  2015-6-5 21:42  /  1614 人查看  /  16 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在学习C语言中“函数调用问题”时,本应该写成“int m=max(max(56, 238),120));",因马虎,写成”int m=max((56,238),120);”,但是仍然能够执行,这是为什么呢?




代码如下




#include <stdio.h>
int max(int x,int y){
    return x>y?x:y;


}

int main(int argc, const char * argv[]) {
   
   int m=max((56, 238),120);//此处
    printf("m=%d",m);
    return 0;
}


执行结果为:m=238;
请教下各位大神,为什么仍可执行,而且结果正确啊?

16 个回复

倒序浏览
函数值传递应该是把(56, 238)传输给X,相当于逗号表达式,取后面的值238给了X.是不是你可以把56和238换一下就知道了
回复 使用道具 举报
楼上大神正解啊
回复 使用道具 举报
逗号表达式的求值:从左到右对逗号连接的每一个表达式进行求值,并且将最右边的一个表达式的值作为整个逗号表达式的值
回复 使用道具 举报
七尺阳光 发表于 2015-6-5 21:59
函数值传递应该是把(56, 238)传输给X,相当于逗号表达式,取后面的值238给了X.是不是你可以把56和238换一下就 ...

果然,非常感谢!!
回复 使用道具 举报
都学到函数调用了。。。
回复 使用道具 举报
逗号表达式也是有值的
回复 使用道具 举报
taolove 来自手机 中级黑马 2015-6-6 01:24:09
8#
逗号表达式吗?(56,238)取238后面这个值
回复 使用道具 举报
括号里也是一个表达式,叫逗号表达式,也是有返回值的,所有可以运行
回复 使用道具 举报
余丽丽 发表于 2015-6-5 23:20
逗号表达式的求值:从左到右对逗号连接的每一个表达式进行求值,并且将最右边的一个表达式的值作为整个逗号 ...

很详细,感谢
回复 使用道具 举报
taolove 发表于 2015-6-6 01:24
逗号表达式吗?(56,238)取238后面这个值

哈哈,是的哦
回复 使用道具 举报
李永方 发表于 2015-6-5 23:21
果然,非常感谢!!

不客气,大家共同进步
回复 使用道具 举报
只是相当于把整个括号内的东西传递给int x,然后回返回一个最大值!
回复 使用道具 举报
嗯 大神正解
回复 使用道具 举报
来晚了,别人都正解完了:)
回复 使用道具 举报
学习学习!
回复 使用道具 举报
围观学习一下,确实是逗号表达式的原因。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马