最近看了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编写了这段代码。