【发布时间】:2015-03-23 11:09:37
【问题描述】:
最近,我阅读了 libuv 的源码。 阅读QUEUE.h时有一些问题
首先: 宏定义如下:
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写了这段代码。
【问题讨论】: