返回值的问题10.14
#include<stdio.h>void as(int x,int y,int *cp,int*dp)
{*cp=x+y;
*dp=x-y;
}
main()
{int a=4,b=3,c,d;
as(a,b,&c,&d);
printf("%d%d\n",c,d);
}
这道题中没有反回值,为什么算出来的结果7和1会传回c和d????
7和1是c、d的值,保存在c、d所代表的地址中。它不是函数的返回值,函数的返回值是有专门的堆栈来存放的(也许还有其他的存放的方法,我不了解),你定义了void型函数,就没有返回值。如果你定义了int型的函数,里面有句“return a”,那么在程序运行完的时候会自动把a的值压入int型的堆栈。
个人观点
你是问:
这道题中 我想“没有返回值”,为什么算出来的结果7和1会传回c和d????
#include<stdio.h> void as(int x,int y,int *cp,int*dp) {*cp=x+y; *dp=x-y; } main() {int a=4,b=3,c,d; as(a,b,&c,&d); printf("%d%d\n",c,d); }
看一下源程序,我是这样认为的:
因为,“c,d"的指针作为实参去替代形参,这样改变的值是是他们地址里存放的内容, 所以自然就有返回值。( 个人观点!)
看一下基础教材的传值和传址,还有引用。
int live41(int &a,int &b) main() { live41(m,n); }
int live41(int *a,int *b) main() { live41(&m,&n); }
以上两种都行,而且原理都一样,用哪种就看你方便。