|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include <stdio.h>
void swap(int x, int y);
void swap(int x, int y)
{
int temp;
printf("In swap, 互换前:x = %d, y = %d\n", x, y);
temp = x;
x = y;
y = temp;
printf("In swap, 互换后:x = %d, y = %d\n", x, y);
}
int main()
{
int x = 3, y = 5;
printf("In main, 互换前:x = %d, y = %d\n", x, y);
swap(x, y);
printf("In main, 互换后:x = %d, y = %d\n", x, y);
return 0;
}
代入函数swap的数据经过计算后值不会改变吗?
第二个printf("In main, 互换后:x = %d, y = %d\n", x, y); 出来的结果还是3和5
确实不会改变的,在swap函数内部,x、y的值确实被互换了,也就是swap内的两个printf的输出是互换成功的,但是swap函数结束后,在main函数不会有任何变化。
解决这个问题,可以把x、y设定为全局变量,swap函数直接改变x、y即可,不要再传参;另一种方法就是,传入x、y变量的内存地址,也就是传址。
之所以会有这个问题,是因为,在函数中,参数的值是无法改变的,但传址的话,地址无法改变,但可以间接利用地址,也就是取值的方式,修改变量的值。
|
|