#include<stdio.h>
//定义一个函数交换两个变量的值
void swap(int p,int q);
void swap_2(int * p,int * q);
void swap_3(int * p,int * q);
void main(){
int a = 5,b = 3;
//swap(a,b);
//swap_2(a,b); 编译失败 不能将int型的变量 传递给int * 的变量
//swap_2(&a,&b);
swap_3(&a,&b);
printf("a=%d,b=%d\n",a,b);
}
//理解 结果改变了 原因是通过实参传递过来的是a b的值,在函数中交换的是 *p 表示a * q 表示b 所以申明变量
//直接修改了a b的值
void swap_3(int * p,int * q){
int temp = * p;
* p = * q;
* q = temp;
}
//理解:结果是没有改变的 原因是,通过实参传递过来的是a和b的内存地址。
//形参 p表示存储的a的内存地址 * p = q ---- q表示存储的b的内存地址 * q = b
//在函数调用的时候,我们使用的是 p q 交换的只是 p q存储a b的地址。所以结果并没有改变
void swap_2(int * p,int * q){
printf("* p = %d\n",*p);
printf("* q = %d\n",*q);
printf("p = %d\n",p);
printf("q = %d\n",q);
int * temp = p;
p = q;
q = temp;
printf(" swap after-----\n");
printf("p = %d\n",p);
printf("q = %d\n",q);
}
//理解:没有交换值,原因是我们通过调用swap函数值,通过实参传递过来的数据,只是实参数据的一份拷贝
//所以改变的只是形参的p q的值
void swap(int p,int q){
int temp = p;
p = q;
q = temp;
printf("p=%d,q=%d\n",p,q);
}