我在C中有一个关于数组初始化/使用的问题,用于存储struct
。
假设我有一个人struct
:
struct person {
char *name;
int age;
};
我声明了一个person struct
s:
struct person people[1000];
我的问题是,鉴于此数组在将来n
struct person
添加到people[]
的程序中的某个未来点,有什么方法可以告诉我在哪里放置n + 1
struct person
for
?
在类似Java的东西中,带if(people[i] == null)
的{{1}}循环可以告诉你该索引是否还没有任何值,但是在C中,因为这是一个实际值的数组,我知道我可以&#39 ; t检查if(people[i] == NULL)
,因为NULL
是指针。
在C中有可靠/正确的方法吗?
答案 0 :(得分:2)
只需使用变量来跟踪数组中元素的数量。
int people_count = 0;
struct person people[1000];
void add(struct person p) {
people[people_count] = ...
people_count++;
}
答案 1 :(得分:2)
在C中,数组的位置不能为空,这意味着数组中的所有元素都必须存在(在Java中,您基本上会有指针数组,而在C中,您有大小值的数组,具体取决于您的结构大小)。
一个常见的解决方案是在您的结构中添加id
字段,以指示您的结构在特定位置的结构是否已初始化,即:
struct person {
char *name;
int age;
int id; // meaning: is initialized
};
我假设你想在你的数组中放入一些东西不仅在最后(在这种情况下,其他答案更好),但也是一些由于某种原因尚未初始化的位置。
答案 2 :(得分:0)
有多种解决方案:
只需存储n
的值,并在必要时进行更新。
在HEAP上分配people
数组的项目,因此项目的类型将为person*
。然后你可以检查null
指针,它也更友好,因为你不必存储不必要的元素。但是,对于计算性能,我仍然不建议使用线性搜索找到第一个空数组元素,而是存储第一个空闲项的索引。