在C语言中,所有参数都是通过值传递
的,也就是说,传递给被调函数的参数值存放在临时变量中,而不是存放在原来的变量中。被调函数不能直接修改主调函数中变量的值,而只能修改其私有的临时副本的值。
传值调用利大于弊,在被调函数中,参数可以看做便于初始化的局部变量,因此额外使用的变量更少,这样程序可以更紧凑
/* power: raise base to nth
power; n >= 0; version 2 */
int power(int base, int n)
{
int p;
for (p = 1; n > 0; n)
p = p * base;
return p;
}
其中,参数n用作临时变量,并在for循环中递减,这样就不需要引入额外的变量,而且在power
函数中的操作不会影响到调用函数的原始值。
必要时,也可以让函数能够修改主调函数中的变量,调用者需要向被调函数提供带设置的变量地址,而被调函数则需要将对应的参数声明为指针类型,并通过它间接访问变量。我们将在第五章讨论指针。
如果参数是数组,把数组名当做参数时,传递给函数的值是数组的起始元素的位置或地址---它并不复制数组元素本。在被调函数中,可以通过数组下标访问或修改数组元素的值。下一节讨论。
网友评论