可能重复:
Why does C++ support memberwise assignment of arrays within structs, but not generally?
在C语言中,struct
可以通过立即分配复制,但array
不能复制。{/ p>
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*/
C语言有哪些设计优势来区分array
和struct
的分配?
@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 */
C编程中普遍存在array
语法糖:
array_var == &array_var
如果我们想要一种新的语言功能array
可以通过立即分配来复制struct
,那么遗留代码肯定会被破坏。这是在C中使用克隆array
的主要障碍之一吗?
答案 0 :(得分:1)
在前K& R C struct
对象中也不可分配。当这个被更改时,也考虑了数组,但是注意到C标准需要进行许多更改以适应数组。
答案 1 :(得分:0)
你甚至可以这样做:
struct S {
int a[2];
};
并轻松分配。因此,如果将它们包装在结构中,则可以间接分配数组。