В языке C все аргументы функций передаются по значению.
По необходимости, можно сделать так, чтобы функция модифицировала переменные в вызывающем модуле программы. Для этого взывающая функция должна передать адрес переменной (в понятиях C - указатель на переменную), а вызываемая - объявить параметр указателем и обращаться к переменной косвенно, по ссылке через указатель. Если же, имя массива используется в качестве аргумента, то передаваемое в функцию значение как раз и является местонахождением (адресом) начала массива. Копирования элементов массива не происходит.
Лист. 1.
Лист. 2.
Лист. 3.
Литература: Брайн Керниган, Деннис Ритчи "Язык программирования C (ANSI C)"