若有定义int c[4][5],(*cp)[5];和语句cp=c,则能正确引用c数组元素的是a.cp+1 b.*(cp+3) c.*(cp+1)+3 d.*(*cp+2)解释一下正确原因和错误原因.

问题描述:

若有定义int c[4][5],(*cp)[5];和语句cp=c,则能正确引用c数组元素的是
a.cp+1 b.*(cp+3) c.*(cp+1)+3 d.*(*cp+2)
解释一下正确原因和错误原因.

*(*cp+2)代表c[0][2]这个元素.
cp是行指针,用于指向二维数组的一行.
cp=c,故cp+1是第1行的指针.
*(cp+3)等价于c[3],代表第3行.
*(cp+1)+3 等价于c[1]+3.
*(*cp+2)等价于*(*(cp+0)+2),等价于c[0][2],代表c数组的一个元素.