вторник, 7 января 2014 г.

Аргументы. Вызов по значению

    Вызываемая функция не может непосредственно изменить переменную вызывающей функции: она может изменить только ее частную, временную копию.

    Параметры можно рассматривать как должным образом инициализированные локальные переменные вызванной подпрограммы.

#include <stdio.h>

int power(int m, int n);

int main(void)
{
    int i;
    for(i = 0; i < 10; ++i)
        printf("%d %d %d\n", i, power(2, i), power(-3, i));
    return 0;
}

/* 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 выступает здесь в роли временной переменной, в которой циклом for в убывающем порядке ведется счет числа шагов до тех пор, пока ее значение не станет нулем. При этом отпадает надобность в дополнительной переменной i для счетчика цикла. Что бы мы ни делали с n внутри power, это не окажет никакого влияния на сам аргумент, копия которого была передана функции power при ее вызове.

Комментариев нет:

Отправить комментарий