初始化结构数组的全局数组

时间:2015-07-25 11:17:50

标签: c arrays struct

我用这种方式声明了一个struct数组:

struct struct_name tab1[6] ={ {"1487" ,0.144}, {"148",2.1},    {"45",0.01}, {"12475847",0.52}, {"46",1.4}, {"0",5} };
struct struct_name tab2[7] = { {"1" ,0.9}, {"76",5.1},{"46",0.17},{"4625",0.0},{"46252",1.57},{"12",1.5},{"5",1.2} };

这很好用。

现在我需要在一个数组tab1中创建tab2global_tab并仍以这种方式初始化数据,但到目前为止我还没有能够这样做。我试过像这样的动态分配

global_tab = malloc(2 * sizeof(struct struct_name *));
global_tab[0] = malloc(100 * sizeof(struct struct_name));
global_tab[0] = { {"1487" ,0.144}, {"148",2.1}, {"45",0.01}, {"12475847",0.52}, {"46",1.4}, {"0",5} };

但是我收到了这个错误

error: expected expression before ‘{’ token
  global_tab[0] ={ {"1487" ,0.144}, {"148",2.1}, {"45",0.01}, {"12475847",0.52}, {"46",1.4}, {"0",5} };

我希望能够像global_tab[0]一样初始化tab1

2 个答案:

答案 0 :(得分:3)

C不提供数组聚合分配。花括号构造仅在初始化表达式 * 中可用。如果您想将特定数据放入动态分配的块中,可以使用数据生成static变量,并使用memcpy,如下所示:

static struct struct_name tmp0[] ={ {"1487" ,0.144}, {"148",2.1},    {"45",0.01}, {"12475847",0.52}, {"46",1.4}, {"0",5} };
global_tab[0] = malloc(sizeof(tmp0));
memcpy(tmp0, global_tab[0], sizeof(tmp0));

* 有些编译器提供结构和数组聚合作为扩展,但使用此功能会使您的代码不可移植。

答案 1 :(得分:2)

您对初始化分配感到困惑。这些操作是不同的,尽管它们都使用=

int m = 42;  // initialization
int n;
n = 42;  // assignment

错误的代码类似:

global_tab[0] = { {"1487" ,0.144}, {"148",2.1}, {"45",0.01}, {"12475847",0.52}, {"46",1.4}, {"0",5} };

这是赋值,不能使用初始化语法。 C99 复合文字也许就是你想要的。