構造体のポインタのバイト単位のオフセット計算

例えば、以下のような構造体があるとしよう。


typedef struct dkc_LZW_Node{
///データ
dkcdLZW_DATA code;
///親
struct dkc_LZW_Node *parent;
///左の葉
struct dkc_LZW_Node *left;
///真中の葉
struct dkc_LZW_Node *middle;
///右の葉
struct dkc_LZW_Node *right;
///red blackのどちらかの色
dkcdLZW_COLOR color;
}DKC_LZW_NODE;


この構造体の配列のbyte単位のオフセット計算をこのような計算をしていた。(node_sentinelは0xff番目のポインタ値)


DKC_LZW_NODE node[0xff];
int result = (int)(node_sentinel - (&(node[0])));

私はunsigned char *型のポインタばかり使っていたのでこの引き算の結果を勘違いしていたらしい。

resultには0xffが入ってくれる。C言語も便利な言語だナァ〜。
バイト単位の値が欲しいんだって…^^;


result * sizeof(DKC_LZW_NODE);
もしくは

DKC_LZW_NODE node[0xff];
//...なんかの計算
int result = (int)((unsigned char *)node_sentinel -
(unsigned char *)(&(node[0])));
でOK?