首页 > 试题广场 > 若有定义int a[3][5], i, j; (且0≤
[单选题]
若有定义int a[3][5], i, j; (且0≤i<3, 0≤j<5),则a[i][j]不正确的地址表示是() 。
  • &a[i][j]
  • a[i]+j
  • *(a+i)+j
  • *(*(a+i)+j)
推荐
B。根据题目定义为一个3行5列的数组。B选项属于对第i行指针的整体移动j行,最后指向的是i+j元素地址。
  • 选项A,是表示地址的标准方式,用&符号。
  • 选项C,指针的移动定位,二维数组名可以理解为指向该数组第一行的指针,a+i定位到数组i行首元素地址,*(a+i)表示第i行第一个元素,加上j表示a[i][j]
  • 选项D,指针的移动定位,是指向C选项元素的指针。
编辑于 2019-11-04 16:05:24 回复(0)
B错
a[i]+j表示a[i][j]
a[i]可看作是1个一维数组
eg
int a[1000];
sort(a,a+100);
for(int i=0;i<100;i++)
printf("%d ",a[i]);
编辑于 2019-11-01 14:23:23 回复(1)
B不正确
B是数组中元素的值的运算,不是地址
A用了取地址符‘&’,直接得到元素地址
C、D都是通过指针符‘*’来指向元素的地址
/*
用‘&’和‘*’的取地址表示方式不同,‘&’后面用中括号表示元素,‘*’后面用数组变量加序列位置
‘&’:在符号后面直接加元素可得地址,例:scanf("%d",&a[i]); (元素读入的常用语句)
‘*’:在符号后用数组变量加上i、j等序列位置来定位,例:int *d; d=*(a+i); (把地址赋值给指针变量)
另外,‘*’也可以取指针的地址,如D项,取了C中指针的地址
发表于 2019-11-01 08:25:40 回复(0)
D,显然
发表于 2019-11-01 16:40:42 回复(0)
选B
发表于 2019-11-01 15:44:04 回复(0)