Если у меня есть массив фиксированного размера, в зависимости от того, как он определен и используется, я обычно использую один из двух способов ссылки на него.
Тип массива 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
}
Есть ли более элегантное решение для обработки массивов, не доходя до конца и не останавливаясь слишком рано. Мысли? Комментарии?