Some questions with the source of the libuv? <p>Recently,I read the source of libuv. There are some questions when read the QUEUE.h</p> <p><strong>Firstly:</strong> The macro define below：</p> <pre><code>typedef void *QUEUE[2]; #define QUEUE_NEXT(q) (*(QUEUE **) &amp;((*(q))[0])) #define QUEUE_PREV(q) (*(QUEUE **) &amp;((*(q))[1])) </code></pre> <p>Can I redefine the QUEUE_PREV(q) as:</p> <pre><code>#define QUEUE_PREVR(q) ((QUEUE *) &amp;((*(q))[1])) </code></pre> <p><strong>what is the diffrence between them?</strong></p> <p><strong>Secondly:</strong> I try the code below:</p> <pre><code>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] = &amp;i; a[1] = &amp;j; cout &lt;&lt; (QUEUE*)(&amp;((*(&amp;a))[1])) &lt;&lt; endl; cout &lt;&lt; *(QUEUE*)(&amp;((*(&amp;a))[1])) &lt;&lt; endl; </code></pre> <p><strong>The result is same on the console,But why? Don't the "*" works?? I write this code with VS2013.</strong></p>