func((exp1,exp2),(exp3,exp4,exp5))这个调用有2个实参,那么怎么传进去呢,就是怎么用呢?

unbutun 2010-03-05 04:03:39
谁能给个例子?

谢谢了。
...全文
914 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
breezes2008 2010-03-05
  • 打赏
  • 举报
回复
,表达式,VERY VERY GOOD!
让我想起《C和指针》一书中while逗号表达式。
unbutun 2010-03-05
  • 打赏
  • 举报
回复
引用 11 楼 cy330206 的回复:
    print((3, 2), (1, 4, 3)); 
00401088  push        3
0040108A  push        2
0040108C  call        @ILT+0(_print) (00401005)
00401091  add        esp,8
直接把2和3放进了堆栈,再是跳到程序的开始处


3ks
unbutun 2010-03-05
  • 打赏
  • 举报
回复
引用 9 楼 huanmie_09 的回复:
引用 1 楼 stardust20 的回复:括号。。加逗号运算符。。。
是的。参考以下代码:
C/C++ code
#include<stdio.h>void print(int a,int b) {
printf("a=%d, b=%d\n", a, b);
}int main()
{
print((3,2), (1,4,3));/*传入实参先进行表达式的运算, 逗号表达式将最右边的操作数作为表达式的结果, 如(3,2)表达式运算结果为2,因此传入print的实参为2, 3*/return0;
}


3ks
cy330206 2010-03-05
  • 打赏
  • 举报
回复
print((3, 2), (1, 4, 3));
00401088 push 3
0040108A push 2
0040108C call @ILT+0(_print) (00401005)
00401091 add esp,8
直接把2和3放进了堆栈,再是跳到程序的开始处
cy330206 2010-03-05
  • 打赏
  • 举报
回复
楼主括号运算符a=(x+1,y);相当于a=y,x+1是要运算的但是a不会=x+1的,
func((exp1,exp2),(exp3,exp4,exp5))所以也等价与func(exp2,exp5)的
huanmie_09 2010-03-05
  • 打赏
  • 举报
回复
引用 1 楼 stardust20 的回复:
括号。。加逗号运算符。。。

是的。参考以下代码:

#include<stdio.h>

void print(int a, int b) {
printf("a=%d, b=%d\n", a, b);
}

int main()
{
print((3, 2), (1, 4, 3)); /*传入实参先进行表达式的运算, 逗号表达式将最右边的操作数作为表达式的结果, 如(3,2)表达式运算结果为2,因此传入print的实参为2, 3*/
return 0;
}
unbutun 2010-03-05
  • 打赏
  • 举报
回复
引用 6 楼 codefly 的回复:
引用 2 楼 yyg990441 的回复:你标题写的就是在调用了比如: func((1,2),(3,4,5)); 就相当于func(2,5);

同意。至于参数如何传进去,编译器会帮你把2和5压栈,然后跳转到func的代码起始处。


能给个例子吗,比如如何得到剩下的参数?
harizu76 2010-03-05
  • 打赏
  • 举报
回复
还有这样写的啊。的确是第一次看见
悠然红茶 2010-03-05
  • 打赏
  • 举报
回复
引用 2 楼 yyg990441 的回复:
你标题写的就是在调用了
比如:
func((1,2),(3,4,5));
就相当于func(2,5);


同意。至于参数如何传进去,编译器会帮你把2和5压栈,然后跳转到func的代码起始处。
冻结 2010-03-05
  • 打赏
  • 举报
回复 1
func((exp1,exp2),(exp3,exp4,exp5))
有意思,没见过。
lingyin55 2010-03-05
  • 打赏
  • 举报
回复
里面是一个逗号表达式,最后只传入一个exp
james_hw 2010-03-05
  • 打赏
  • 举报
回复
引用楼主 unbutun 的回复:
谁能给个例子?

谢谢了。


如果是实参的话,会直接拷贝一个副本传入函数
yyg990441 2010-03-05
  • 打赏
  • 举报
回复
你标题写的就是在调用了
比如:
func((1,2),(3,4,5));
就相当于func(2,5);
stardust20 2010-03-05
  • 打赏
  • 举报
回复
括号。。加逗号运算符。。。

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧