黑马程序员技术交流社区

标题: 关于函数调用问题 [打印本页]

作者: 李永方    时间: 2015-6-5 21:42
标题: 关于函数调用问题
在学习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;
请教下各位大神,为什么仍可执行,而且结果正确啊?

作者: 七尺阳光    时间: 2015-6-5 21:59
函数值传递应该是把(56, 238)传输给X,相当于逗号表达式,取后面的值238给了X.是不是你可以把56和238换一下就知道了
作者: yi95392    时间: 2015-6-5 22:45
楼上大神正解啊
作者: 余丽丽    时间: 2015-6-5 23:20
逗号表达式的求值:从左到右对逗号连接的每一个表达式进行求值,并且将最右边的一个表达式的值作为整个逗号表达式的值

作者: 李永方    时间: 2015-6-5 23:21
七尺阳光 发表于 2015-6-5 21:59
函数值传递应该是把(56, 238)传输给X,相当于逗号表达式,取后面的值238给了X.是不是你可以把56和238换一下就 ...

果然,非常感谢!!
作者: jx836202365    时间: 2015-6-5 23:31
都学到函数调用了。。。
作者: 晗修    时间: 2015-6-6 00:39
逗号表达式也是有值的
作者: taolove    时间: 2015-6-6 01:24
逗号表达式吗?(56,238)取238后面这个值
作者: fixer    时间: 2015-6-6 06:01
括号里也是一个表达式,叫逗号表达式,也是有返回值的,所有可以运行
作者: 李永方    时间: 2015-6-6 07:18
余丽丽 发表于 2015-6-5 23:20
逗号表达式的求值:从左到右对逗号连接的每一个表达式进行求值,并且将最右边的一个表达式的值作为整个逗号 ...

很详细,感谢
作者: 李永方    时间: 2015-6-6 07:20
taolove 发表于 2015-6-6 01:24
逗号表达式吗?(56,238)取238后面这个值

哈哈,是的哦
作者: 七尺阳光    时间: 2015-6-6 23:21
李永方 发表于 2015-6-5 23:21
果然,非常感谢!!

不客气,大家共同进步
作者: ⒈苆都s.兲憶    时间: 2015-6-6 23:24
只是相当于把整个括号内的东西传递给int x,然后回返回一个最大值!
作者: 恩赐_RWQqZ    时间: 2015-6-6 23:51
嗯 大神正解
作者: 天下1083    时间: 2015-6-7 08:07
来晚了,别人都正解完了:)
作者: chensc    时间: 2015-6-7 15:59
学习学习!
作者: 白0702    时间: 2015-6-8 16:48
围观学习一下,确实是逗号表达式的原因。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2