迭代一个C数组

我有一个结构数组,我在程序中的某处创建。

后来,我想迭代一遍,但我没有数组的大小。

我如何迭代元素? 或者我需要在某处存储大小?

您可以在某处存储大小,或者您可以使用具有特殊值集的结构,将其用作标记,与’\ 0’表示字符串结尾的方式相同。

如果在编译时已知数组的大小,则可以使用结构大小来确定元素的数量。

 struct foo fooarr[10]; for(i = 0; i < sizeof(fooarr) / sizeof(struct foo); i++) { do_something(fooarr[i].data); } 

如果在编译时不知道,则需要在某处存储大小或在数组末尾创建一个特殊的终止符值。

这取决于。 如果它是一个动态分配的数组,也就是你创建它调用malloc,那么就像其他人建议你必须保存数组的大小/某个元素的数量或者有一个sentinel(一个具有特殊值的结构,这将是最后一个)。

如果它是一个静态数组,你可以调整它的大小/一个元素的大小。 例如:

 int array[10], array_size; ... array_size = sizeof(array)/sizeof(int); 

请注意,除非它是全局的,否则这只适用于初始化数组的范围,因为如果将它传递给另一个函数,它会被衰减为指针。

希望能帮助到你。

我认为你应该在某处存放大小。

用于确定数组长度的以null结尾的字符串模型是个坏主意。 例如,获得数组的大小将是O(N),否则很可能是O(1)。

话虽如此,一个好的解决方案可能是glib的Arrays ,如果你需要添加更多的项目,它们还具有自动扩展的额外优势。

PS是完全诚实的,我没有使用太多的glib,但我认为它是一个(非常)有信誉的库。