C语言 若有程序段int **p, *q[5]; p=q; ,则以下不正确的叙述是()

若有程序段int **p, *q[5]; p=q;,则以下不正确的叙述是()
A.执行语句p=q;后p指向q[0]
B.p+3就是q[3]的地址
C.**(p+3)与*q[3]等价
D.q与p都不是指针常量
为什么答案是D,麻烦每个选项都解释解释,谢谢!

p=q就是将二级指针p指向指针数组q的首地址,即*p指向的地址就是q[0]所指向的地址。
所以p指向q[0]正确(即A正确)
p+3就是q[3]的地址跟A类似,只是偏移了三个内存单元(即B正确)
**(p+3)与*q[3]等价都是指向q[3]所指向的内存地址单元,值都是一样的(即C正确)
对于D,由于定义了*q[5]后,指针q就是确定的,即为常量
温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-10-13
D中p是二级指变量还是指针变量,q是常数,不是指针变量,D不正确