正确版:指针法
void swap(int * pa, int * pb)// void swap(int*pa,int*pb) { int z = 0; z = *pa; //交换的是地址,即数值 *pa = *pb; //*pa访问的就是int a,即20 *pb = z; } int main() { int a = 10; int b = 20; printf("打印前:a=%d b=%d\n", a, b); swap(&a, &b); // swap(&a,&b) printf("打印后:a=%d b=%d\n",a,b); return 0; }
错误版:
void swap(int x, int y)//重新找变量定义,用xy定义 { int z = 0; //一个函数什么都不返回且不需要返回时,函数类型为void z = x; x = y; y = z; } int main() { int a = 10; int b = 20; printf("打印前:a=%d b=%d\n", a, b);//("a=%d b=%d\n",a,b); swap(a, b);//自定义变量swap(a,b) printf("打印后:a=%d b=%d\n", a, b); return 0; }
错误代码!!!!!!!!!!!!!!
因为主函数的a,b有独立空间(字节),,swap函数也有自己的空间(字节), 主函数可以把数值传给swap函数,但是swap一系列操作,只会改变swap
不会改变主函数的数值