首页 > 试题广场 >

在C语言中,若有定义:int a[4][10](其中0=i

[单选题]

C语言中,若有定义:int a[4][10](其中0<=i<4,0<=j<10);则下列选项中对数组元素a[i][j]引用错误的是()

  • *(a+i)+j
  • *(&a[0][0]+10*i+j)
  • *(a[i]+j)
  • *(*(a+i)+j)
推荐
A
A是a[i][j]的地址
D是A再取*则是a[i][j]的值
C正确,a[i]为第i行第0个元素的值,加j后为a[i][j]地址,再取*就是a[i][j]
B正确,a[0][0]取地址是数组第一个元素的地址,加上10*i为第i行第0个元素的地址,在加j是a[i][j]地址,再取*是a[i][j]的值
编辑于 2017-03-18 09:07:02 回复(7)

一维数组:
a[i]=>*(a+ i) //算出A[i]的地址,取值
二维数组:
A[i][j] => (A[i])[j] => (*
(A+i))[j] =>*(*(A+i) + j)

A.*(A+i) + j => &A[i][j]

编辑于 2017-09-10 08:07:09 回复(1)

说到点子上就是:

🌟🌟🌟对于二维数组

a[i]就是:a加i取值—取到的值是地址,记为p。

a[i][j]就是:p加j取值—取到的值是数值,就是最后的结果!

而*(a+i)和a[i]等价;

*(*(a+i)+j)和a[i][j]等价。

发表于 2018-10-21 12:54:25 回复(0)
只需要明白。
C语言二维数组中a[i]表示a[i][0]的地址,而a[i]又可以表示为*(a+i)
发表于 2022-02-28 09:25:02 回复(2)
#include <stdio.h>
#include <stdlib.h>
int main(){
     int a[2][3]={1,2,3,4,5,6};
     printf("%d \n",*(a[1]+1)); // 输出5
     printf("%d \n",*(*(a+1)+1));  // 输出 5
     printf("%d \n",*(&a[0][0]+3*1+1)); // 输出 5
     printf("%d \n",*(*(a+1)+1));// 输出 5
     system("pause"); 
     return 0;
     } 
测试了一下 ! 不得不说C语言快被我遗忘的差不多了

发表于 2017-04-25 10:09:58 回复(0)
A选项 :      *(a+i)+j 等价与a[i]+j
一定要记住 *(a+i)与a[i]等价
发表于 2021-05-27 09:10:02 回复(0)
公式 *(p+i)<=> p[i]
发表于 2017-06-20 00:01:32 回复(0)
学java的注意了,java的引用就是地址。 c/c++中引用的意思就是那个区域的内容(值)。
发表于 2017-11-28 21:14:58 回复(1)
a+i是指针,指向a[i](即a[4]中的第i个元素,也就是一个长度为10的数组),*(a+i)就是数组,编译器在处理时,将*(a+i)自动转换为指向该数组首元素的指针,+j后该指针指向a[i][j],再次取值即得到了a[i][j]
编辑于 2020-07-11 15:09:42 回复(0)
二维数组两个[ ]或者两个*都表示元素 对[ ][ ] 取地址表示地址 一个*表示地址 一个[ ]表示地址 加常数表示偏移
编辑于 2018-06-05 11:34:15 回复(0)
D
发表于 2016-12-05 20:22:36 回复(0)
B,C,D相同。A表示a[i][j]的地址值
发表于 2016-12-26 20:14:16 回复(1)
B 难道i*10+j 不用乘4?
发表于 2022-11-03 08:50:47 回复(1)
不用考虑 i, j 的取值范围.
发表于 2019-04-08 21:38:51 回复(0)
A得到的是A[i][j]的地址,而不是它的引用!
发表于 2017-05-30 21:17:15 回复(0)
AD有什么区别
发表于 2017-01-14 18:00:35 回复(1)
这题其实很简单 程序的世界中 &表示取出元素的地址 *表示取出元素的值 这里实际上就可以秒选A 但是为什么选A 这里的知识点在于一维数组的元素首地址 其实就是数组名a *( a+i)得到对应的元素a[i] 正确应该是*((a+i)+j)
发表于 2023-11-10 16:26:47 回复(0)
正确答案为D. 因为a为数组地址加常数i为地址。 取*为数组元素再加j为数组常数所以A选项为数组常数正确!从而D错误!
编辑于 2017-08-14 20:18:48 回复(2)
*(a[i,0]+j)
发表于 2023-04-24 00:33:22 回复(0)
所以说,其中0<=i<4,0<=j<10是个关系式而不是for循环条件吗- -
发表于 2018-11-20 14:29:17 回复(0)