C语言===参考答案为A,求详细解释

已知int i=0,j=1,*p=&i,*q=&j;错误的语句是:
A)i=*&q; B)p=&*&i; C)j=*p++; D)i=*&j;
===参考答案为A,求详细解释

q是j的地址 i等于赋予了j的地址

&是取地址*是寻址(解引用)所以 q 指针 所指内存中存的是j的地址 也就是*q=0x0003(j的地址) 指针*q又有自己的地址q==0x0001 理解了上述就可以明白了 *&q 所以其实是 &取了指针*q的地址的地址之后又寻址 也就是说*&q=q。

q本身就是指针 * &操作后还是指针,和i的int类型不匹配

&是取地址,*是解引用,
q是j的地址,相当于再取q的地址,就是指针的指针,然后把指针的指针解引用,最后是j的地址,逻辑上,int和int*不匹配不能直接赋值