给定结构Element
:
typedef struct {
char someString[9]
int value;
} Element
和数组elementList
:
Element elementList[5];
有一种简单的方法可以动态地将Element添加到列表的每个索引中吗?我尝试创建一个函数add_element
,它接受列表并在那里修改它,但我更喜欢与Java elementList[i] = new Element
相当的东西。
答案 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() );
在任何一种情况下,阵列大小都是固定的;你无法增长或缩小数组中元素的数量。