为何C语言中void类型swap函数无法实现整数交换?
解决C语言swap函数无法交换整数的问题
你的问题根源在于函数参数的传递方式:当前swap函数用的是值传递,调用swap(x,y)时,程序会把main里x、y的值复制一份,传给函数里的形参x和y。函数内部交换的只是这两个副本,main函数里的原始变量完全没被改动,所以输出还是原来的值。
要解决这个问题,需要用地址传递(指针),让函数直接操作main里的原始变量。修改后的代码如下:
#include<stdio.h> void swap(int *x, int *y){ int temp; temp = *x; *x = *y; *y = temp; } int main(void){ int x,y; printf("Enter X: \n"); scanf("%d",&x); printf("Enter Y: \n"); scanf("%d",&y); swap(&x, &y); // 传入变量的地址,让函数能找到并修改原始变量 printf("%d , %d",x,y); return 0; }
关键改动说明:
- 把swap函数的形参改成
int *x和int *y(指针类型),用来接收变量的地址 - 函数内部用
*x、*y来访问指针指向的原始变量,这样交换的就是main里的x和y本身 - 调用swap时,传入
&x和&y(取地址运算符),把变量的地址传给函数
内容的提问来源于stack exchange,提问作者FrostyTheWest
相关产品推荐
相关产品推荐

