C语言圣经K&R笔记 1.8参数——值传递

1.8 参数——值传递

对用惯其他语言特别是Fortran的程序员来说,可能会不习惯C函数的一个特点。在C中,所有函数参数都是“值传递”的。这意味着被调用的函数收到的是放在临时变量里面的参数值,而不是原始的参数。这会导致一些不同,比如“按引用调用”的语言Fortran,或者Pascal中的var参数,后两者的被调例程直接访问的是原始参数,而不是本地拷贝。

最主要的区别就是C中被调用的函数不能直接改变调用它的函数里的变量;它只能改变它私有、临时的拷贝。

值传递是资产,而不是负债。它通常会带来更精简的程序,不会有多余的变量,因为参数可以很方便地作为被调函数中已初始化过的本地变量。下面这个版本的power使用了这个特性:

/* power 第二版 */
int power(int base, int n)
{
    int p;

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

参数n被用作临时变量,并减小到0为止。不再需要变量i。不管在power里对n做什么,都不会影响调用power时传给它的参数。

若有需要,可以写出这样的函数,它能改变调用方函数内的变量。调用者必须提供该变量的“地址”(技术性的叫法是“指针”),而被调函数的参数必须声明为指针,并通过指针间接地访问变量。详见第五章。

对数组来说就不一样了。当数组名作为参数时,被传递的是数组开头的地址——不做数组元素的拷贝。通过下标,函数可以访问并修改数组内的任意元素。这是下一节的主题。

C语言圣经K&R笔记 1.8参数——值传递_第1张图片

 

你可能感兴趣的:(C语言,笔记,c语言)