如何在C数组中找到下一个空格?

时间:2014-11-16 23:19:34

标签: c arrays

我在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中有可靠/正确的方法吗?

3 个答案:

答案 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)

有多种解决方案:

  1. 只需存储n的值,并在必要时进行更新。

  2. 在HEAP上分配people数组的项目,因此项目的类型将为person*。然后你可以检查null指针,它也更友好,因为你不必存储不必要的元素。但是,对于计算性能,我仍然不建议使用线性搜索找到第一个空数组元素,而是存储第一个空闲项的索引。