c语言形参实参问题

来源:百度知道 编辑:UC知道 时间:2024/07/07 19:04:19
#include <stdio.h>
void main()
{void swap (int *p1,int *p2);
int a,b;
int *point_1,*point_2;
scanf("%d,%d",&a,&b);
point_1=&a;
point_2=&b;
if(a<b)swap (point_1,point_2);
printf("\n%d,\n%d",a,b);
}
void swap(int *p1,*p2)
{int temp;
temp=*p1;
* p1=*p2;
*p2=temp;
}
为什么if(a<b)swap (point_1,point_2);这里是指针变量名,而不是指针变量,下边定义函数时候()中不是指针变量吗?另外point—1,point——2所指的是a,b地址,在进行swap()后它们所指的地址变了吗?
而且形参实参是怎么联系起来的,觉得好困难!!

不要乱就行了,不管是实参、形参,是不是指针;
调用函数时,传进去的参数,在调用函数里执行时,是使用拷贝副本的方法去做的,比如:

func1(int i){};调用这个函数时,到了func1函数内部,将拷贝一份i的副本即将i值复制到另一个变量中,func1的所有操作都是在副本上进行的,所以func1()调用用,副本释放,而i的值调用前后不会变;

如:
func2(int* pi){};调用这个的时候,到了func2()函数内,将拷贝一份pi的副本到另一个变量中,func2的所有操作都在副本上进行的,但是我们要注意的是,pi本身是一个指向内存的地址,我们把内存的地址给了func2,如果func2利用这个地址对该内存进行修改,那么修改在调用func2后仍然有效;