当前位置: 代码迷 >> 综合 >> c/c++函数传值的三种方式:值传递,指针传递,引用传递(引用传递只在c++中有)
  详细解决方案

c/c++函数传值的三种方式:值传递,指针传递,引用传递(引用传递只在c++中有)

热度:19   发布时间:2023-10-15 13:37:44.0

1. 值传递

由于值传递是单向传递,传递过程中只是改变了形参的数值,并未改变实参的数值,因此并不会改变a和b原有的值。

#include <stdio.h>void swap(int x, int y);
void swap(int x, int y)
{int temp;temp = x;x = y;y = temp;
}int main( int argc, char *argv[] )
{int a = 5;int b = 10;swap(a, b); //调用交换函数printf("交换结果为 a = %d, b = %d\n",a,b);return 0;
}

 

2. 指针传递

指针传递过程中,将a和b的地址分别传递给了x和y,在函数体内部改变了a、b所在地址的值,即交换了a、b的数值。

#include <stdio.h>void swap(int *x, int *y);
void swap(int *x, int *y)
{int temp;temp = *x;*x = *y;*y = temp;
}int main( int argc, char *argv[] )
{int a = 5;int b = 10;swap(&a, &b); //调用交换函数printf("交换结果为 a = %d, b = %d\n",a,b);return 0;
}

 

3. 引用传递

引用传递中,在调用swap(a, b);时函数会用a、b分别代替x、y,即x、y分别引用了a、b变量,这样函数体中实际参与运算的其实就是实参a、b本身,因此也能达到交换数值的目的。值得注意的是,C语言中是没有引用传递,这是C++中语言特性,因此在.c文件中使用引用传递会导致程序编译出错。

#include <stdio.h>void swap(int &x, int &y);
void swap(int &x, int &y)
{int temp;temp = x;x = y;y = temp;
}int main( int argc, char *argv[] )
{int a = 5;int b = 10;swap(a, b); //调用交换函数printf("交换结果为 a = %d, b = %d\n",a,b);return 0;
}

 

  相关解决方案