假设有以下C语言定义语句,表达式(31)不能正确引用值为7的数组元素。    int y[4][4]={1,2,3,4,5,6,7,8,9,10},*py1=y[1],(*py2)[4]=y;

admin2013-02-02  32

问题 假设有以下C语言定义语句,表达式(31)不能正确引用值为7的数组元素。    int y[4][4]={1,2,3,4,5,6,7,8,9,10},*py1=y[1],(*py2)[4]=y;

选项 A、py1[2]
B、*(y+1)+2
C、*(y[1]+2)
D、py2[1][2]

答案B

解析 在C语言中,二维数组名y及y+l均表示行指针,在它们前面加一个*就是*y和*(y+1),它们就成为列指针。而一维数组名y[1]则为列指针,y[1]+1中的“1”代表一个元素所占的字节数。列指针前面加上&,则变为行指针。例如,&(*(y+1))、&y[1]。对于选项A的py1[2],无条件等价于*(py1+2)=(y[1]+2)=*(*(y+1)+2)。式中py1、y[1]为列指针,而y、py2为行指针。选项B的*(y+1)+2,是列指针的表示形式,无法得到所指单元中的值,即不能正确引用值为7的数组元素。其中,y+l为行指针,*(y+1)为列指针,*(y+1)+2则为指向1行2列的列指针。 选项C的,(y[1]+2)无条件等价于*(*(y+1)+2),指向第2行的第3个元素。相当于列指针“+2”,在横向上的移动。选项D的py2[1][2]无条件等价于*(py2[1]+2=*(*(py2+1)+2)。py2为行指针,py2[1]为列指针, py2[1][2]则为列指针指向的1行2列的元素。
转载请注明原文地址:https://jikaoti.com/ti/h6L7FFFM
0

最新回复(0)