Для аргументов, вы не можете передавать массивы только указатели. Когда компилятор увидит аргумент int fr[arraysize]
, он будет трактовать как int *fr
.
Когда вы делаете звонок
frequency(freq_array);
массив распадается на указатель на его первый элемент. Вышеуказанный вызов равен
frequency(&freq_array[0]);
И у С вообще нет прохода по ссылке . Указатель будет передан по значению.
Однако с помощью указателей вы можете эмулировать передавать по ссылке. Например
void emulate_pass_by_reference(int *a)
{
*a = 10; // Use dereference to access the memory that the pointer a is pointing to
}
int main(void)
{
int b = 5;
printf("Before call: b = %d\n", b); // Will print that b is 5
emulate_pass_by_reference(&b); // Pass a pointer to the variable b
printf("After call: b = %d\n", b); // Will print that b is 10
}
Теперь важно знать, что сам указатель (&b
) будет передан по значению.