该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
#include
void swap(int a, int b)
{int temp; temp=a;a=b;b=temp;}
void main(void)
{int a=23,b=7;
if(a>b) swap(a,b);
printf(“%d,%d\n”,a,b);}
答案是23,7
我看书,书上说,C语言中,只有实参传递给形参,没有形参形参给实参的。但可以通过返回值实现函数调用,使主调函数得到一个确定的值。
所以我认为,这个题的关键在于它没有return,没有返回值,所以前面的函数对后面的主调函数没有产生影响。所以还是23,7。 而非7,23。对吗?
还有,swap前有个void,书上说这种指函数无类型,无函数值,不会把任何值带回main函数。难道是因为这个void????
另外,我百度到了这个题目。
void swap(int*a,int*b)
{int *t;
t=a;a=b;b=t;
}
main()
{int i=3,j=5,*p=&i,*q=&j;
swap(p,q);
printf("%d %d\n",*p,*q);
满意答案是这样的:
关键看一点:swap函数里交换的是什么?
1、交换的是地址
2、交换的是值
如果交换的是地址,也就是形参,那么函数结束后,栈内存自动释放,交换是不会产生效果的;
如果交换的是值,也就是说不是形参,而是形参&a和&b所指向的值,那么交换可以成功
如果swap函数写成这样,答案就是5 3
void swap(int *a, int *b)
{
int t;
t=*a;*a=*b;*b=t;
}
如果我之前想的是对的,那么这个答案不就白忙活了,它即没有return,又是void,当然对main函数没有影响喽。 但这个答案获赞很多,于是我又怀疑自己想错了,难道是因为上树两题都是主函数在后面,所以不需要return? 那void怎么解释呢??
不懂啊!!!求大神啊!!!拜托了!!!急死了!!