在C中,如何在数组中找到元素的偏移量

时间:2016-10-19 08:30:41

标签: c arrays runtime element offset

#define ID_A 5
#define ID_B 7
#define ID_C 9
const int id_arr={ ID_A, ID_B, ID_C, };

我知道我是否需要知道id_arr中ID_C的偏移量, 我可以使用像

这样的简单函数
int get_offset(id){
   for(i=0;i<id_arr_num;++i){
       if(id==id_arr[i]) return i;
   }
}

但是arr是const, 所以我可以知道ID_C的偏移在运行前会是2, 是否可以使用宏或其他方式在c运行时之前知道偏移量?

2 个答案:

答案 0 :(得分:2)

不是直接使用ID,而是使用自身偏移的索引:

enum {
    IDX_A,
    IDX_B,
    IDX_C,
    IDX_COUNT
};
const int id_arr={ 5, 7, 9 };
/* Error checking to make sure enum and array have same number of elements (from assert.h) */
static_assert((sizeof id_arr / sizeof *id_arr) == IDX_COUNT, "Enum/array mismatch");

用法很简单:

id = id_arr[IDX_A];

答案 1 :(得分:1)

避免使用宏。
而你忘了定义id_arr_num 不,在运行时之前无法知道此索引,并尽可能避免使用全局值。

此功能将为您提供您正在寻找的变量的索引:

int get_offset(id, arr, size){
   for(i = 0;i < size;++i)
       if(id == arr[i]) return i;
}