我用这种方式声明了一个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
中创建tab2
和global_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
答案 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 复合文字也许就是你想要的。