2016-10-19 17 views
0
#define ID_A 5 
#define ID_B 7 
#define ID_C 9 
const int id_arr={ ID_A, ID_B, ID_C, }; 

の要素のオフセットを見つけるためにどのようにC、 では、私は私はid_arrにID_Cのオフセットを知る必要がある場合、私は知っている配列

int get_offset(id){ 
    for(i=0;i<id_arr_num;++i){ 
     if(id==id_arr[i]) return i; 
    } 
} 

のような簡単な関数を使用することができます。しかし編曲ですconst は、ランタイムの前にオフセットを知るためにマクロや他の方法を使う方法です

+2

'のconst int型id_arr = {ID_A、ID_B、ID_C、};' .....··· – LPs

+0

もし私があなたを得ているなら:いいえ、プリプロセッサーを持つ配列に特定の値のアイテムインデックスを知ることはできません – LPs

答えて

1

マクロを使用しないでください。
id_arr_numを定義するのを忘れてしまった。
いいえ、ランタイムの前にこのインデックスを知る方法がなく、可能な限りグローバル値を使用しないでください。

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の直接、使用インデックスを使用するよりも

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

いくつかのニックネーム:1. Cでグローバルな*定数*を使わないでください。機能は基本的にOPが異なるパラメータで書いたものと同じです。 3.シングルワードラインは使用しないでください。強調する必要がある場合は、* italics *または** bold **を使用してください。 – user694733

2

この機能は、あなたが探している変数のインデックスを与えます:

id = id_arr[IDX_A]; 
関連する問題