实现一个函数来交换两个整数的内容。
先看一个失败案例:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
void 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=%d\n", 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
#include<stdio.h>
int 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=%d\n", a, b);
return 0;
}
int swap(int* a, int* b)
{
int tmp = 0;
tmp = *a;
*a = *b;
*b = tmp;
}
这样就可以成功实现交换两个整数了。