关于C语言指针和函数的问题(追加分)

2025-05-16 18:02:10
推荐回答(4个)
回答1:

这么给你解释吧,指针就相当是一个门牌号。第一个呢,是因为f()函数的参数是指针,就是“门牌号”,所以他们交换的时候是把门牌号进行了交换。所以当你第二次进行访问的时候,原来A房间变成了B房间,所以当你想要让A房间里的人出来的时候,这个时候原来住在里面的B君就出来了。所以发生了交换。
第二个呢,传的是形参,形参就是把A君复制一个(我们理解为克隆一个A君),然后克隆一个B君,最后把克隆人交换。然后我们输出的时候,我们却要A房间里的人,那个时候,A君还在自己的房间,当然他们出来的时候,就是没有交换了。如果,要交换,我们可以输出克隆人。那么看到的结果就是已经发生了交换。
我把第二个代码,给你稍微改下,就是输出克隆人,那么你就会看到,我们原来交换的只是克隆人了。
============
第二个
#include
void main()
{void f(int x,int y);
int a,b;
scanf("%d,%d",&a,&b);
f(a,b);
}
void f(int x,int y)
{int p;
p=x;
x=y;
y=p;
printf("%d,%d",x,y);
}
输入5,9
输出9,5
===========

有不明白的继续追问!

回答2:

调用有参函数,实质上是将传入的参数先备份,调用函数的内部处理实质上是对那块儿备份空间进行处理。
先说第二种情况,因为传入参数之后,a和b各备份出来一份,函数内部的操作是对这块儿备份空间操作的,所以,调用f()函数之后,原来的a、b所在的空间的值依然没变。
第一种情况,因为函数传入参数是地址,所以,虽然也是同样备份,但是备份的却是a和b的地址,调用函数内部操作是针对于备份出来的地址空间。此时,备份出来的地址所指向的空间依然是a、b空间。因此,调用f()函数之后,a、b交换成功。

希望你理解了这个问题。这是第一次回答问题,有什么不妥请多多担待。

回答3:

自己去看函数参数那一部分 ,还有我还是比较少看到把函数声明放到另一个函数内的呢

回答4:

在第一个程序中,函数调用的参数是指针,所以f(po1,po2)相当于f(*(&x),*(&y)),而*与&互为逆运算,在函数调用过程中改变了实参的值。第二个程序则只对形参做改变,实参未发生变化!