可能重複割り当て:C言語で
Why does C++ support memberwise assignment of arrays within structs, but not generally?
はC
を、struct
は即時割り当てしかしarray
できないでコピーすることができます。
int a[2] = {1, 2};
int a2[2] = a; /*illegal*/
int *p = a; /*assigned by reference*/
struct S {int i; int j;};
struct S s = {1, 2};
struct S s2 = s; /*assigned by value*/
はarray
とstruct
の割り当てを区別するためにC言語で設計上の利点は何ですか?
@EDIT
実際には、我々は通常、他の多くの言語のようにC関数を呼び出すときの値で渡すのではと思いますが、引数がarray
のであれば、それは効果的に参照によって渡されます。
struct S {int i; int j;};
void pass_by_value(struct S s);
struct S s2 = {1, 2};
pass_by_value(s2); /* s2 is copied to s */
void pass_by_ref(int a[]);
int a2[] = {1, 2};
pass_by_ref(a2); /* a2 is referenced to a */
ためシンタックスシュガーありますarray
Cプログラミングの普及:
array_var == &array_var
我々はしたい場合はarray
が即時割り当て、レガシーコードでstruct
のようにコピーすることができるという新しい言語機能それから間違いなく壊れます。これはCでクローン化可能なarray
を持つ主要な障害の1つですか?
技術的には、あなたが表示している行のどれも_assignments_ではありません。これらは_初期化_です。あなたは 'int a [2]をすることができませんでした。 int a [2] = {1,2};は正当なものであり、 'struct'sでは' struct S {int i; int j; } s; s = {1,2}; 'どちらでも構いませんが、C99では' s =(struct S){1、2}; 'を実行できます。 –