Если мы передаем массив функции на C, всегда ли он передается по ссылке?

#c #reference

#c #ссылка

Вопрос:

Если мы не хотим, чтобы значение array менялось в main функции, что мы можем сделать? Например:

     int func(int a[])
    {
         ------
         ---
    }

    int main()
    {
          int a[100];
          for (i = 0; i < 100; i  )
              scanf("%d", amp;a[i]);
          func(a);
    }
  

В этом примере значения, которые мы помещаем в массив в main функции, заменяются в func функции. Как этого избежать?

Ответ №1:

Да, массивы всегда передаются «по ссылке»; передаваемое значение является указателем на нулевой элемент массива.

Вы можете указать компилятору запретить изменения, сделав его const :

 int func(const int a[])
{
    …
    a[0] = 1;  // Compiler error - attempt to modify constant array
    …
}
  

Обратите внимание, что обычно хорошей идеей является передача размера массива (количества (используемых) элементов в нем) в качестве дополнительного аргумента функции:

 int func(int n, const int a[n])  // C99 or later
int func(const int a[], int n)   // Classic argument order