Одна з рис функцій C можливо не знайома програмістам, які звикли до інших мов, зокрема Fortran. У C, аргументи функцій передаються «за значенням». Це означає, що викликаній функції передаються значення аргументів у вигляді тимчасових змінних, а не оригінали. Це призводить до дещо відмінних властивостей, ніж ті, які можна зустріти у разі «виклику за зверненням», типового для Fortran, або у випадку параметрів var у Pascal, в якому викликана функція має доступ до оригінального аргументу, а не локальної копії.
Проте, виклик за значенням — це перевага, а не перешкода. Він, як правило, веде до компактніших програм з меншою кількістю сторонніх змінних, оскільки з параметрами можна обходитись як зі зручно ініціалізованими локальними змінними у викликаній функції. Ось, наприклад, версія power, яка користується цією властивістю.
/* power: зводить base до n-ного степеня; n >= 0 */
int power(int base, int n)
{
int p;
for (p = 1; n > 0; --n)
p = p * base;
return p;
}
Параметр n використовується як тимчасова змінна, значення якої поступово зменшується (циклfor, у оберненому напрямку), доки n не дорівнюватиме нулю. Потреба у змінній i відпадає. Що би не відбулося з n всередині power, це не матиме жодного впливу на аргумент, з яким powerбуло початково викликано.
Якщо треба, можна також примусити функцію змінити змінну у виликовій функції. В такому разі, викликач має вказати адресу змінної, над якою відбудеться дія (тобто, покажчик на змінну), а викликана функція повинна оголосити параметр, як покажчик, і звернутися до змінної непрямо через нього. Ми розглянемо покажчики в Розділі 5.
З масивами — інша історія. Коли як аргумент вказано назву масиву, тоді значення передане функції складатиметься з місцезнаходження, тобто адреси початку масиву; жодного копіювання елементів масиву не відбувається. Через індексацію цього значення, функція може звернутися і змінити будь-який елемент масиву. Саме це буде темою наступного розділу.