学科分类
目录
C语言

值传递

函数的形参如果是一个普通变量,实际参数到形式参数的数据传递过程就叫作值传递。值传递是将实际参数复制一份副本传递到函数中,在函数内部对参数进行修改,而不会影响到实际参数。

下面通过一个案例演示函数参数的值传递,具体如例1所示。

例1 value.c

 1  #include <stdio.h>
 2  void func(int a,int b )        //函数功能:交换两个整型数据
 3  {
 4    int temp;
 5    temp = a;
 6    a = b;
 7    b = temp;
 8    printf("a=%d b=%d\n", a, b);    //输出交换之后的数据
 9  }
 10 int main()
 11 {
 12   int x = 10, y = 20;        //定义实际参数
 13   func(x, y);            //调用func()函数
 14   printf("x=%d y=%d\n", x, y);    //输出main()函数的实际参数变量
 15   return 0;
 16 }

例1运行结果如图1所示。

图1 例1运行结果

在例1中,第2~9行代码定义了一个函数func(),该函数有两个参数a和b,在函数内部交换两个参数的值,并打印输出交换后的变量值。第12行代码在main()函数中定义了两个变量x和y,其值分别为10和20。第13行代码调用func()函数,并将变量x、y作为参数传递给func()。第14行代码打印变量x、y的值。由图1可知,func()函数中变量a、b的值交换成功,而main()函数中变量x、y的值并没有交换。

在值传递过程中,实际参数在栈中有独立的内存空间,形式参数变量在栈中也有独立的内存空间,将实际参数传递给形式参数,就是用实际参数的值初始化形式参数变量,在形式参数内存中改变这个数值,实际参数不会受到影响。例如,在例1中,调用func()函数时,编译器会在栈中为参数a、b分别分配一块内存空间,然后用变量x和y的值初始化变量a和b,在func()函数内部交换a、b的值,变量x、y的值并不受影响。形参变量a、b与实参变量x、y在内存中的状态如图2所示。

图2 形参变量a、b与实参变量x、y在内存中的状态

点击此处
隐藏目录