2017-09-19 11 views
-1

私は、配列をcの関数に渡している間に知りたかったのです。パスを取得する配列値のコピーか、渡される配列アドレス(参照)ですか?配列がcの関数に渡されたときに渡されるのは何ですか?配列値または参照アドレスのコピー?

+0

配列をCの関数に渡すと、最初の変数のアドレスが渡されます。 – VatsalSura

+0

関数に渡された配列は、最初の要素へのポインタに減衰します。 –

+0

配列のベースアドレスが渡されます。 – Rafal

答えて

0

パスを取得する配列値のコピーか、渡される配列アドレス(参照)はコピーされていますか?技術的に

どちら。 C関数では、引数は常に値渡しされます。配列(変数)の場合、関数の引数として渡されている間、配列の最初の要素へのポインタに減衰します。ポインタは、通常どおり、値渡しされます。

しかし、他のポインター型引数と同様に、呼び出された関数から、ポインター(または有効な範囲内にとどまっている限り、ポインター算術による派生ポインター)が指す値を変更する場合は、呼び出し元関数内の実際の配列要素の値も影響を受けます。アレイが、それは暗黙的であり、例えばポワントに減衰関数の引数として渡される

1

char * foo(char buffer[]) 
{ 
printf("sizeof buff= %d",buffer); // here you will get pointer size not original buf because buffer is decay to pointer as char *buffer 

} 

int main() 
{ 
char buf[10]="hello"; 
foo(buf); 

} 

それはポインタに減衰する理由は時間.ITの中のすべての要素をコピーするためのより高価です配列を呼び出し関数のパラメータに渡します。暗黙のうちにそれはポインタに崩壊する。

関連する問題