交换两个变量的三种办法(创建临时变量和不创建临时变量)

错误示范:

源代码

#include<stdio.h>
#include<Windows.h>
//错误示范
//void swap2(int a2, int b2)
//{
    
    
//		int temp = a2;
//		a2 = b2;
//		b2 = temp;
//}

//创建临时变量法
void swap1(int *a1,int *b1)
{
    
    
	
	int temp = *a1;
	 *a1 = *b1;
	 *b1 = temp;
}
//不创建临时变量时的两种办法
 void function4(int a, int b)
 {
    
    
	/* a = a + b;
	 b = a - b;   //b = (a + b) - b
	 a = a - b;   //a = (a + b) - a
	 printf("交换后:a=%d,b=%d\n", a, b);*///方法一

	 a = a ^ b;
	 b = a ^ b;   //b=(a ^ b) ^ b         
	 a = a ^ b;   //a=(a ^ b) ^ a
	 printf("交换后:a=%d,b=%d\n", a, b);//方法二

 }
int main()
{
    
    
	int a = 60,b = 90;
	printf("before:%d,%d\n", a, b);
	swap1(&a,&b);
	printf("after:%d,%d\n", a, b);
	system("pause");
}

错误示范:
在这里插入图片描述
正确操作!
在这里插入图片描述
传值传参:函数传参时发生形参实例化,拷贝了实参内容,形成临时变量。
在栈上开辟的空间,随着交换函数的结束,临时变量被释放,不能改变外部实参的内容。

传址传参:想改变实参的内容,就在传参的时候,传实参的地址,而不是实参本身。

对于指针也一样,如果你想调用一个函数的时候改变一个指针的指向,那么你就得传这个指针的地址(二级指针),而不是指针本身!

猜你喜欢

转载自blog.csdn.net/Zhou000815/article/details/110559003