向数组添加结构

时间:2016-03-04 14:51:47

标签: c arrays struct

给定结构Element

typedef struct {
    char someString[9]
    int value;
} Element

和数组elementList

Element elementList[5];

有一种简单的方法可以动态地将Element添加到列表的每个索引中吗?我尝试创建一个函数add_element,它接受​​列表并在那里修改它,但我更喜欢与Java elementList[i] = new Element相当的东西。

2 个答案:

答案 0 :(得分:4)

没有必要,数组包含结构实例。

你可以这样做:

strcpy(elementList[0].someString, "foo");
elementList[0].value = 4711;

这在Java中是不可能的,其中所有内容都是引用,但在C中,您可以执行此操作。如果您想要一堆NULL能力的引用,那么在C中你使用指针:

Element *elementList[5]; /* An array of 5 pointers to type Element. */

然后你必须使用例如堆分配以确保在访问Element之前有内存:

elementList[0] = malloc(sizeof *elementList[0]); /* This might fail! */
elementList[0]->value = 17;

答案 1 :(得分:1)

正如声明的那样,您已经创建了一个由5个元素组成的Element 个实例;没有必要分配新的Element个对象。您可以继续阅读/分配每个元素的每个成员:

element[i].value = some_value();
strcpy( element[i].someString, some_string() );

如果想要模拟Java方法,您可以执行以下操作:

Element *elementList[5]; // create elementList as an array of *pointers* to Element
...
elementList[i] = malloc( sizeof *elementList[i] ); // dynamically allocate each element

请注意,在这种情况下,您使用->运算符代替.运算符来访问每个Element成员,因为每个elementList[i]都是指针指向Element,而不是Element实例:

elementList[i]->value = some_value();
strcpy( elementList[i]->someString, some_string() );

在任何一种情况下,阵列大小都是固定的;你无法增长或缩小数组中元素的数量。