题目
设int a[4][3]=(1,2,3,4,5,6,7,8,9,10,11,12);int(* ptr)[3]=a,*p=a[0];,则与数组元素a[1][2]等价的是( )A. *((p+2)+3)B. *(*(p+3))C. (*ptr+1)+2D. *((ptr+1)[2])
设int a[4][3]={1,2,3,4,5,6,7,8,9,10,11,12};int(* ptr)[3]=a,*p=a[0];,则与数组元素a[1][2]等价的是( )
- A. *((p+2)+3)
- B. *(*(p+3))
- C. (*ptr+1)+2
- D. *((ptr+1)[2])
题目解答
答案
D.*((ptr+1)[2])
解析
步骤 1:理解指针和数组的关系
数组a[4][3]是一个二维数组,其中a[1][2]表示第二行第三列的元素。指针ptr指向数组a的首地址,而指针p指向数组a的第一行的首地址。
步骤 2:分析选项A
选项A:*((p+2)+3)
p指向a[0][0],p+2指向a[0][2],(p+2)+3指向a[0][5],但a[0]只有3个元素,所以这个表达式是非法的。
步骤 3:分析选项B
选项B:*(*(p+3))
p指向a[0][0],p+3指向a[1][0],*(*(p+3))表示a[1][0],与a[1][2]不等价。
步骤 4:分析选项C
选项C:(*ptr+1)+2
ptr指向a[0],*ptr指向a[0][0],(*ptr+1)指向a[0][1],(*ptr+1)+2指向a[0][3],但a[0]只有3个元素,所以这个表达式是非法的。
步骤 5:分析选项D
选项D:*((ptr+1)[2])
ptr指向a[0],ptr+1指向a[1],(ptr+1)[2]指向a[1][2],*((ptr+1)[2])表示a[1][2],与a[1][2]等价。
数组a[4][3]是一个二维数组,其中a[1][2]表示第二行第三列的元素。指针ptr指向数组a的首地址,而指针p指向数组a的第一行的首地址。
步骤 2:分析选项A
选项A:*((p+2)+3)
p指向a[0][0],p+2指向a[0][2],(p+2)+3指向a[0][5],但a[0]只有3个元素,所以这个表达式是非法的。
步骤 3:分析选项B
选项B:*(*(p+3))
p指向a[0][0],p+3指向a[1][0],*(*(p+3))表示a[1][0],与a[1][2]不等价。
步骤 4:分析选项C
选项C:(*ptr+1)+2
ptr指向a[0],*ptr指向a[0][0],(*ptr+1)指向a[0][1],(*ptr+1)+2指向a[0][3],但a[0]只有3个元素,所以这个表达式是非法的。
步骤 5:分析选项D
选项D:*((ptr+1)[2])
ptr指向a[0],ptr+1指向a[1],(ptr+1)[2]指向a[1][2],*((ptr+1)[2])表示a[1][2],与a[1][2]等价。