错误示范:
源代码
#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");
}
错误示范:
正确操作!
传值传参:函数传参时发生形参实例化,拷贝了实参内容,形成临时变量。
在栈上开辟的空间,随着交换函数的结束,临时变量被释放,不能改变外部实参的内容。
传址传参:想改变实参的内容,就在传参的时候,传实参的地址,而不是实参本身。
对于指针也一样,如果你想调用一个函数的时候改变一个指针的指向,那么你就得传这个指针的地址(二级指针),而不是指针本身!