如果我们想要交换两个数字的值,我们可以使用一个中间变量来暂时储存其中一个,再进行赋值操作,代码如下:
int a=2;
int b=4;
int temp=0;
temp=a;
a=b;
b=temp;
如果我们采用函数调用的方法,应该可以写出下面的代码,当然了这个代码是有问题的,我们后面再讨论
#include<stdio.h>
void swap(int a,int b)
{
int temp;
temp = a;
a = b;
b = temp;
}
int main()
{
int a=2;
int b=4;
puts("函数调用前:");
printf("a=%d\n",a);
printf("b=%d\n",b);
swap(a,b);
puts("函数调用后:");
printf("a=%d\n",a);
printf("b=%d\n",b);
return 0;
}
如果你运行的话,你会发现输出是有问题的:
为什么结果不会变?
这就涉及到按值传递的问题,在上述的代码中,实参向形参传递的是数值,并未改变实参本身的数值,所以说输出结果不变,如果不使用指针,我们可以将puts语句和printf语句放在swap函数内部,即如下
#include<stdio.h>
void swap(int a, int b)
{
int temp;
temp = a;
a = b;
b = temp;
puts("函数调用后:");
printf("a=%d\n", a);
printf("b=%d\n", b);
}
int main()
{
int a = 2;
int b = 4;
puts("函数调用前:");
printf("a=%d\n", a);
printf("b=%d\n", b);
swap(a, b);
return 0;
}
当然了,我们也可以使用指针来帮助我们,代码如下
#include<stdio.h>
void swap(int *a,int *b)
{
int temp;
temp = *a;
*a =*b;
*b = temp;
}
int main()
{
int a=2;
int b=4;
puts("函数调用前:");
printf("a=%d\n",a);
printf("b=%d\n",b);
swap(&a,&b);
puts("函数调用后:");
printf("a=%d\n",a);
printf("b=%d\n",b);
return 0;
}
此时可以看到运行结果是,