2016-10-22 7 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

はい、配列は常に '参照'によって渡されます。渡された値は、配列の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 
関連する問題