最近、libuvのソースを読みました。QUEUE.h を読むときにいくつか質問があります
まず: 以下のマクロ定義:</p>
typedef void *QUEUE[2];
#define QUEUE_NEXT(q) (*(QUEUE **) &((*(q))[0]))
#define QUEUE_PREV(q) (*(QUEUE **) &((*(q))[1]))
QUEUE_PREV(q) を次のように再定義できますか。
#define QUEUE_PREVR(q) ((QUEUE *) &((*(q))[1]))
それらの違いは何ですか?
第二に: 私は以下のコードを試します:
typedef struct{
int i1;
int i5 ;
int i6;
}s1;
typedef struct
{
int j1;
int j2;
int j3;
}s2;
s1 i = { 1, 2 ,61};
s2 j = { 97, 99, 90 };
QUEUE a;
a[0] = &i;
a[1] = &j;
cout << (QUEUE*)(&((*(&a))[1])) << endl;
cout << *(QUEUE*)(&((*(&a))[1])) << endl;
結果はコンソールでも同じですが、なぜですか? 「*」は機能しませんか?? このコードはVS2013で書いています。