若定义 char s[2][3]={“ab”, “cd”}, *p=(char *)s; 那么下列表达式语法正确,并且其值与 s[1][1]相等的表达式(并非一定与其等价)是
A. *(s+3)
B. *s+2
C. *(p+3)
D. *++p+2
A. *(s+3)
B. *s+2
C. *(p+3)
D. *++p+2
s[1][1]应该是字符d
p指向s的首地址,选D
A有问题,s+3是指向第3行,然后取第0个元素,相当于s[3][0],这是越界访问了
B有问题,* s是第0行,+2指向第0行第2个元素
C有问题,由于s每行有3个元素,那么p+3就是指向第2行的第0个元素,所以 * (p+3)是字符c
D的话,++p使得p指向第0行第1个字符的地址,即b的地址,然后*++p得到的字符就是b,b字符加上2就是字符d