在C中分配数组和结构

时间:2012-01-28 21:29:15

标签: c arrays struct

  

可能重复:
  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语言有哪些设计优势来区分arraystruct的分配?

@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的主要障碍之一吗?

2 个答案:

答案 0 :(得分:1)

在前K& R C struct对象中也不可分配。当这个被更改时,也考虑了数组,但是注意到C标准需要进行许多更改以适应数组。

答案 1 :(得分:0)

你甚至可以这样做:

struct S {
   int a[2];
};

并轻松分配。因此,如果将它们包装在结构中,则可以间接分配数组。