如果我们将数组传递给C中的函数,它是否总是通过引用传递?

时间:2016-10-22 14:10:01

标签: c reference

如果我们不想在main函数中更改数组的值,我们可以做什么? 例如:

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

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

在此示例中,我们在main函数中放入数组的值将替换为func函数。怎么避免这个?

1 个答案:

答案 0 :(得分:3)

是的,数组总是'通过引用'传递;传递的值是指向数组的第0个元素的指针。

您可以通过将更改设为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