考虑以下 C 程序。
#include
int main () {
int a[4][5] = {{1, 2, 3, 4, 5},
{6, 7, 8, 9, 10},
{11, 12, 13, 14, 15},
{16, 17, 18, 19, 20}};
printf("%d\n", *(*(a+**a+2)+3));
return(0);
}
程序的输出是_______。
注意——这个问题是数字类型。
(一) 18
(二) 19
(三) 20
(四) 14答案:(乙)
解释:给定 a[4][5] 是一个二维数组。设给定数组的起始地址(或基地址)为 1000。
所以,
= *(*(a+**a+2)+3))
= *(*(1000+**1000+2)+3))
= *(*(1000+3)+3)) {given element **1002 = 3}
= *(*(1003)+3))
= *((1003)+3) {4th row selected in given matrix}
= *((1003)+3) {address of 4th element in 4th row}
= a[3][3]
= 19 {element selected a[3][3] = 19}
#include
int main () {
int a[4][5] = {{1, 2, 3, 4, 5},
{6, 7, 8, 9, 10},
{11, 12, 13, 14, 15},
{16, 17, 18, 19, 20}};
printf("%d\n", *(*(a+**a+2)+3));
return(0);
}
选项(B)是正确的。
这个问题的测验