1. 值传递
#include <stdio.h>
void swap(int m, int n);
void swap(int m, int n)
{
int temp;
temp = m;
m = n;
n = temp;
}
int main( int argc, char *argv[] )
{
int a = 10;
int b = 20;
swap(a, b); //调用交换函数
printf("交换结果为 a = %d, b = %d\n",a,b);
return 0;
}
由于值传递是单向传递,传递过程中只是改变了形参的数值,并未改变实参的数值,因此并不会改变a和b原有的值。
2. 指针传递
#include <stdio.h>
void swap(int *m, int *n);
void swap(int *m, int *n)
{
int temp;
temp = *m;
*m = *n;
*n = temp;
}
int main( int argc, char *argv[] )
{
int a = 10;
int b = 20;
swap(&a, &b); //调用交换函数
printf("交换结果为 a = %d, b = %d\n",a,b);
return 0;
}
指针传递过程中,将a和b的地址分别传递给了x和y,在函数体内部改变了a、b所在地址的值,即交换了a、b的数值。
3. 引用传递
#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;
}
引用传递中,在调用swap(a, b);时函数会用a、b分别代替x、y,即x、y分别引用了a、b变量,这样函数体中实际参与运算的其实就是实参a、b本身,因此也能达到交换数值的目的。
注:严格来说,C语言中是没有引用传递,这是C++中语言特性,因此在.c文件中使用引用传递会导致程序编译出错。