C语言的三种函数传递

函数传递的方式一:值传递

void exchange(int x,int y)
{
      int x = a;
      int y = b;//前两步是调用函数隐含的操作
      int tmp;
      tmp = x;
      x = y;
      y = tmp;
      printf("x = %d,y = %d\n",x,y);

}
main()
{
    int a = 2,b= 4;
    exchange(a,b);
    printf("a = %d,b = %d\n",a,b);
    return 0;
}

在函数调用的时候,只是把原本参数的值赋值给了函数中的形式参数。在exchange函数中操作的是形参,没有对原本函数做出操作,所以输出结果是 x = 4,y = 2 a = 2,b = 4。


函数传递的方式二:地址传递

void exchange(int *px,int *py)
{     
      px = &a;
      py = &b;//前两步也是调用函数时候隐含的操作
      int tmp;
      tmp = *px;
      *px = *py;
      *py = tmp;
      printf("*px = %d,*py = %d/n",*px,*py);
}
main()
{ 
      int a = 2,b = 4;
      exchange(a,b);
      printf("a = %d,b = %d\n",a,b);
      return 0;
}

  这次在函数调用的时候是吧a,b的地址赋值给了px,py,所以交换的是真正的a,b变量此时输出的结果是*px = 4,*py = 2
a = 4,b =2 。


函数传递的方式三:引用传递

void exchange(int &x,int &y)//这就是我一开始最迷惑的一种,这种加取地址符号的形参
{
      int tmp = x;
      x = y;
      y = tmp;
      printf("x = %d,y = %d\n",x,y);     
}
main()
{
      int a = 2,b = 4;
      exchange(a,b);
      printf("a = %d,b = %d\n",a,b);
      return 0;
}

  这个取地址的引用传递虽然看起来像值传递,然而确实真正的改变原来常量的值,就像下棋一样操作的不是棋子,而是棋手。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
禁止转载,如需转载请通过简信或评论联系作者。

友情链接更多精彩内容