实现一个函数来交换两个整数的内容。
先看一个失败案例:
#define _CRT_SECURE_NO_WARNINGS 1 #includevoid swap(int a, int b); int main() { int a = 0, b = 0; printf("输入两个数a,b:"); scanf("%d %d", &a, &b); swap(a, b); printf("a=%d b=%dn", a, b); return 0; } void swap(int a, int b) { int tmp = 0; tmp = a; a = b; b = tmp; }
输出的结果是两个整数并未交换。
咦,这是为什么呢?
这就要说起参数传递的知识了,参数传递一般分为两种方式:(1)传值调用:只是将实参的内容复制了一份给形参,而对形参的改变并不影响实参;(2)传址调用:将实参在内存中的地址给形参,形参不另外分配内存,因此此时对形参的改变是会影响实参的。
正确案例如下:
#define _CRT_SECURE_NO_WARNINGS 1 #includeint swap(int* a, int* b); int main() { int* a = 0, * b = 0; printf("输入两个数a,b:"); scanf("%d %d", &a, &b); swap(&a, &b); printf("a=%d b=%dn", a, b); return 0; } int swap(int* a, int* b) { int tmp = 0; tmp = *a; *a = *b; *b = tmp; }
这样就可以成功实现交换两个整数了。



