从头学C(9)参数——传值调用

1

第一章 导言 >> 1.8 参数——传值调用

在C语言中,所有函数的参数都是“通过值”进行传递的,即传递给调用函数的参数值存放在临时的变量中,而不是存放在原来的变量中。究其原因,是因为被调函数不能直接修改主调函数中的变量的值,而只能修改其私有的临时副本的值。(不像Fortran或Pascal,被调用函数必须访问原始参数,而不是访问参数的本地副本)

再看另外一个版本的power函数:

/* power函数:求底数base的n次幂,n>=0;版本2 */
int power(int base, int n)
{
        int  p;

        for(p = 1; n >= 0; --n)
                p = p * base;
        return p;
}

参数n作为临时变量,其实际值是主调函数传进来时n所代表的的整型值,power函数内部对形式参数n的任何操作都不会影响到主调函数中n的原始参数值。

另外,相比上一节的版本,参数n直接作为power函数内部的局部变量使用,而不用额外的引入变量i。

这时肯定就有疑问了:那这样我岂不是不能在调用函数中修改主调函数中的变量了?

当然不是!ANSI C显然也是考虑到了这点,调用者通过向被调函数传递变量的地址(地址就是指向变量的指针)作为参数,而被调用函数也需要将相应的参数声明为指针类型,通过这个变量的地址,就可以实现在调用函数中直接对原始变量进行操作,而不再是操作变量的值副本。关于指针的内容,我们后面还会详细的学习到。

如果是数组参数,情况就不太一样了。如果把数组名作为参数,传递给函数的值其实是数组的起始元素的地址——它并不复制数组元素本身,在被调函数中,可以通过数组下标访问或修改数组元素的值。下一节我们就来看这个例子。

一条评论

Leave A Reply