【发布时间】:2010-09-16 10:27:37
【问题描述】:
如果我有一个固定大小的数组,具体取决于它的定义和使用方式,我通常使用两种方法之一来引用它。
数组类型 1:由于它是基于定义的固定大小,我只是在所有引用它的循环中使用该定义。
#define MAXPLAYERS 4
int playerscores[MAXPLAYERS];
for(i=0;i<MAXPLAYERS;++i)
{
.... do something with each player
}
数组类型 2:由于这个数组可以随着项目的增加而增长,所以我使用 sizeof 来计算其中的条目数。编译器会将大小转换为常量,因此这样做不会有任何运行时损失。
typedef struct
{
fields....
}MYSTRUCT_DEF;
MYSTRUCT_DEF mystruct[]={
{entry 1},
{entry 2},
{entry 3...n}
};
for(i=0;i<(sizeof(mystruct)/sizeof(MYSTRUCT_DEF));++i)
{
..... do something with each entry
}
有没有更优雅的解决方案来处理数组而不超过结尾或过早停止。想法?评论?
【问题讨论】:
-
请注意,这不是通常意义上的可变大小数组(其中元素的数量在运行时会发生变化)。
-
如果您使用的是 C++,那么您确实应该使用其中一种 STL 容器。否则删除 C++ 标记。虽然 C++ 和 C 是半可移植的,但它们并不是一回事。