【专接本课程】c语言指针学习

#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
",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
",*p);
	printf("* q = %d
",*q);

	printf("p = %d
",p);
	printf("q = %d
",q);

	int * temp = p;
	p = q;
	q = temp;

	printf(" swap after-----
");

	printf("p = %d
",p);
	printf("q = %d
",q);

}

//理解:没有交换值,原因是我们通过调用swap函数值,通过实参传递过来的数据,只是实参数据的一份拷贝
//所以改变的只是形参的p q的值
void swap(int p,int q){
	int temp = p;
	p = q;
	q = temp;
	printf("p=%d,q=%d
",p,q);

}
原文地址:https://www.cnblogs.com/qxlxi/p/12860914.html