2016-10-22 81 views
0

如果我们不想在main函数中更改数组的值,我们该怎么办? 例如:如果我们将一个数组传递给C中的函数,它是否总是通过引用传递?

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

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

在这个例子中,我们把在main功能的数组中的值会被替换的func功能。如何避免这种情况?

+2

您需要对阵列进行深层复制。 http://stackoverflow.com/questions/4054075/how-to-make-a-deep-copy-of-an-array –

+0

@JohnBaird为什么你引用C#关于这个话题的问题? –

+0

@zev你的意思是,你不希望数组的值在'main'之外改变,对吧? –

回答

2

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

你可以告诉编译器使得它不允许变化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 
相关问题