2016-10-22 70 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 
相關問題