更改主调函数中的变量

写程序的时候,有时候需要交换变量,比如排序任务中交换两个变量的值x,y。
简单的思路是:
x=y;
y=x;
可这样完全不起作用,因为执行到第二行的时候,x的原始值会被覆盖。因此我们需要多写一行代码。
temp=x;
x=y;
y=temp;
这三行代码便可以实现值交换的功能,下面编写一个驱动程序来测试一下

#include 
void interchange(int u,int v);
int main(void)
{
     
  int x=5,y=10;
   printf("原始数据x=%d and y=%d.\n",x,y);
 interchange(x,y);
 printf("现在x=%d and y=%d.\n",x,y);
 
   return 0;
}
void interchange(int u,int v){
     
 int temp;
 
 temp=u;
 u=v;
 v=temp;
}

结果如下:
更改主调函数中的变量_第1张图片
可以看到数据并未发生变化,这是为什么呢?
因为 interchange() 使用的变量并不是 main() 中的变量.因此交换u和v的值对x和y的值没有任何影响!
现在可以改变interchange()输出打印语句来得到我们想要的结果。

修改之后的代码如下:

#include 
void interchange(int u,int v);
int main(void)
{
     
  int x=5,y=10;
   printf("原始数据x=%d and y=%d.\n",x,y);
 interchange(x,y);
 printf("现在x=%d and y=%d.\n",x,y);
 
   return 0;
}
void interchange(int u,int v){
     
 int temp;
 printf("现在u=%d and v=%d\n",u,v);
 temp=u;
 u=v;
 v=temp;
 printf("现在u=%d and v=%d\n",u,v);
}

运行结果:
更改主调函数中的变量_第2张图片
可以看到程序正确运行
如果需要使用return,而不是这种取巧的方法,这没问题,不过,需要使用指针。

程序实例:

#include 
void interchange(int *u,int *v);
int main(void)
{
     
  int x=5,y=10;
   printf("原始数据x=%d and y=%d.\n",x,y);
 interchange(x,y);
 printf("现在x=%d and y=%d.\n",x,y);
 
   return 0;
}
void interchange(int *u,int *v){
     
 int temp;
 
 temp=*u;
 *u=*v;
 *v=temp;
}

运行结果:
更改主调函数中的变量_第3张图片
程序正确运行
个人总结:
指针是一种非常简单实用的工具,在许多语言中,地址都归计算机管理,对程序猿隐藏,而在C中可以通过&运算符访问地址,通过*运算符获得地址上的值,这对于程序员有很高的自由度。

你可能感兴趣的:(c语言)