两数交换在c语言的学习中可以说是基础中的基础,可随着我们的深入学习大家有没有发现一个问题
void Swap1(int a,int b)
{
int tmp=a;
a=b;
b=tmp;
printf("%d,%d\n",a,b);
}
这是个很简单的两数交换,输出结果也正确,那么我们在主函数中调用这个函数后打印a,b的值也应该是正确的,但却与我们想的有些不一样
void Swap1(int a,int b)
{
int tmp=a;
a=b;
b=tmp;
}
int main()
{
int a =10;
int b =20;
Swap1(a,b);
printf("%d,%d\n",a,b);
return 0;
}
这里我们不在函数中打印,而在主函数中打印a , b的值
结果并没有交换
众所周知函数是通过调用实参,在函数里交换数值,可实际上并没有将实参的两个数交换,只是交换形参的两个数
我们需要通过指针访问实参,通过交换实参的两个数达到交换的目的
void Swap(int *a,int *b)
{
int tmp = *a;
*a =*b;
*b=tmp;
}
int main()
{
int a =10;
int b =20;
Swap(&a,&b);
printf("%d,%d\n",a,b);
return 0;
}
我们Swap函数定义两个int类型的指针,通过将a,b实参的地址传递给Swap函数,通过调用指针来调用主函数里的实参达到交换的目的
这里就能成功交换