问题
单项选择题
现有如下程序段:
#include "stdio.h"
main()
int a[5][6]=23, 3, 65, 21, 6, 78, 28, 5, 67, 25, 435, 76, 8, 22, 45, 7, 8, 34, 6, 78, 32, 4, 5, 67, 4, 21, 1;
int i=0, j=5;
printf("%d\n", *(&a[0][0]+2*i+j-2));
则程序的输…结果是
A) 78
B) 23
C) 21
D) 28
答案
参考答案:C
解析: 通过地址来引用二维数组,若有以下定义:int a[3][4], i, j; 且当0≤i≤3,0≤j<4则可以有以下几种方式来引用数组中的第i行,第j列的元素:a[i][j],*(a[i]+j),*(*(a+i)+j),(*(a+i))[j],*(&a[0][0]+4*i+j)。表达式&a[0][0]+2*i+j-2相当于是地址&a[0][0]加上多少偏移量。