我在程序中的某处创建了一系列结构。
后来,我想迭代一遍,但我没有数组的大小。
如何迭代元素?或者我是否需要在某处存储尺寸?
答案 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。说实话,我没有使用太多的油嘴,但我认为它是一个(非常)有信誉的库。