Here && is the GNU C label address operator.
http://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html
int *q = &&i;
i must be a label. You have no label i in your program.
Example of a label:
int main(void)
{
i:
(void) 0;
int i = 0;
int *p = &i;
int *q = &&i;
return 0;
}
I added the (void) 0; statement as labels in C can only put before statements and not before declarations.