【问题标题】:In C, how to find an offset of element in array在C中,如何找到数组中元素的偏移量
【发布时间】:2016-10-19 08:30:41
【问题描述】:
#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 运行时之前的偏移量吗?

【问题讨论】:

  • const int id_arr={ ID_A, ID_B, ID_C, }; .....?????
  • 如果我得到你:不,你不能知道特定值的项目索引到带有预处理器的数组中

标签: c arrays runtime element offset


【解决方案1】:

与其直接使用 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];

【讨论】:

    【解决方案2】:

    避免为此使用宏。
    你忘了定义id_arr_num
    不,没有办法在运行前知道这个索引,尽量避免使用全局值。

    此函数将为您提供要查找的变量的索引:

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

    【讨论】:

    • 一些吹毛求疵: 1. 没有理由避免使用 C 中全局的 constants。 2. 您的功能与 OP 编写的基本相同,但参数不同。 3. 请不要使用单字线。如果您需要强调某些内容,请使用 italicsbold
    猜你喜欢
    • 1970-01-01
    • 2012-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多