迭代一个C数组

时间:2009-10-20 23:17:25

标签: c arrays

我在程序中的某处创建了一系列结构。

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

如何迭代元素?或者我是否需要在某处存储尺寸?

4 个答案:

答案 0 :(得分:42)

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

struct foo fooarr[10];

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

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

答案 1 :(得分:20)

您可以在某处存储大小,或者您可以使用具有特殊值集的结构作为标记使用,就像'\ 0'表示字符串结尾一样。

答案 2 :(得分:11)

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

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

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

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

希望它有所帮助。

答案 3 :(得分:0)

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

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

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

P.S。说实话,我没有使用太多的油嘴,但我认为它是一个(非常)有信誉的库。