首页 > 试题广场 >

已知int a[3][4];则下列能表示a[1][2]元素值

[单选题]
已知int a[3][4];则下列能表示a[1][2]元素值的是()
  • *(*(a+1)+2)
  • *(a+1+2)
  • (&a[0]+1)[2]
  • *(a[0]+1)
推荐
A
在***数组中,数组名是第一个数组的地址.
注意这里a不是第一个元素的地址,而是第一个维数组的地址,a[0][0]才是表示的一维数组第一个元素的地址.
地址 + 1表示向下移一层.
编辑于 2015-04-20 11:08:04 回复(2)
经过调试,答案选A
这是一个三行四列的数组
*(a+1)表示第二行的首地址,和a[1]一样。
*(a+1)+2第二行第三个数字的地址
*(*(a+1)+2)就是第二行第三个数字的值
发表于 2015-08-04 20:21:39 回复(3)

A,   a 是一个二级指针,不是一级指针,*(a+1)表示的第二个数组的地址
B,  *(a+1+2)等于*(a+3),是一个int *, 表示的是 第4个数组a[3]的地址,而 **(a+3)表示a[3][0]的值, 
    *((int *)(a+3)) 也可以表示 a[3][0]的值
C. (&a[0]+1)表示的是第2个数组 a[1]的地址, (&a[0]+1)[2]其实是数组a[3]的地址,改成
    ((int *)(&a[0]+1))[2] 才是对的
D. *(a[0]+1) 是 a[0][1]的值

发表于 2015-07-06 15:13:09 回复(11)
*(a+0)=a[0]        第0行
*(a+1)=a[1]        第1行
*(a+2)=a[2]        第2行
*(a+n)=a[n]        第n行
*(*(a+0) + 0)=a[0][0] 第0行第0列
*(*(a+0) + 1)=a[0][1] 第0行第1列
*(*(a+1) + 0)=a[1][0] 第1行第0列
*(*(a+1) + 1)=a[1][1] 第1行第1列
...
*(*(a+n)+m)=a[n][m] 第n行第m列
==>
a[1][2] = *(*(a+1)+2)

发表于 2019-06-20 19:43:41 回复(3)
重点解释下C:首先a是一个二级指针,a[0]是一级指针,&a[0]又变回二级指针,加一后指向(注意是指向,因为还是二级指针)第二行a[1]。此时再对其取[2]也就是将其向下行(而不是向右列)再移两位又变为一级指针,也就是a[3]。 c的正确引用看3楼。
发表于 2017-12-10 01:12:37 回复(3)
二维数组中a[1] 等于 *(a+1) 代表的是其实就是a[1]所在行的地址,具体是指a[1][0]的地址!注意是地址! *a[1] 等同于 *(a[1]+0)也就是a[1][0]的值!的值! 不知道我说的对不对
发表于 2017-04-10 22:17:43 回复(1)
int a[2][3] 
1)a,数组首地址;a+1,第二行首地址;*a,a[0][0]的地址;*(a+1),a[1][0]的地址;*(a+1)+2,a[1][2]的地址;*(*(a+1)+2),a[1][2]的值。
2)*(a+1+2),即第4行的首地址。
3)a[0],a[0][0]的地址;&a[0]又变回数组首地址,即第一行首地址;&a[0]+1,第二行首地址;(&a[0]+1)[0],等价于&a[0]+1;(&a[0]+1)[2],从第二行开始,下二行首地址,即第四行首地址;*(&a[0]+1),a[1][0]的地址;(*(&a[0]+1))[2],a[1][2]的值。
4)a[0]+1,a[0][1]的地址;*([0]+1),a[0][1]的值。
发表于 2020-04-24 17:07:00 回复(1)
重点解释下C:首先a是一个二级指针,a[0]是一级指针,&a[0]又变回二级指针,加一后指向(注意是指向,因为还是二级指针)第二行a[1]。此时再对其取[2]也就是将其向下行(而不是向右列)再移两位又变为一级指针,也就是a[3]。
发表于 2020-04-03 21:57:24 回复(0)
为啥在java里刷到这样的题呀
发表于 2022-02-23 22:00:25 回复(0)
自己在VS2017上试了一下,这是我自己的理解,有什么不对的话请大佬指出

发表于 2020-12-04 19:27:21 回复(0)
对于学习java的人来说,表示看不懂
发表于 2020-05-08 20:28:09 回复(0)
*是解引用的意思 *(a+1) 对 a+1 解引用
解引用后仍然是地址 再次用 * 解引用
发表于 2019-12-18 08:54:33 回复(0)
在***数组中,数组名a是指向第一个一维数组的指针常量,
因此这里*(a+1)是指向a[1]的第一个元素的指针,所以*(*(a+1)+2)表示a[1][2]

编辑于 2016-04-05 21:55:09 回复(0)
二维数组名a是行指针,也可以看做存放行首地址的指针数组,不是什么二级指针。
发表于 2022-03-13 13:14:11 回复(0)
在***数组中,数组名是第一个数组的地址.
注意这里a不是第一个元素的地址,而是第一个维数组的地址,a[0][0]才是表示的一维数组第一个元素的地址.
地址 + 1表示向下移一层
发表于 2021-09-29 11:51:53 回复(0)
C选项是a[1][2]的地址,a[0]是第一个一位数组的首地址,&a[0]其实就是a,a是指向元素为一位数组的数组的首地址,那么&a[0]+1实际就是指向a[1]的首地址,这个首地址加上2还是一个地址,正好是a[1][2]的地址,如果想要取值,需要使用*,也就是写成*(&a[0]+1)[2],([]的优先级大于*)
发表于 2021-03-21 19:49:17 回复(0)
(&a[0] + 1)[2]   == *(&a[0] + 1 + 2)  == *(&a[0] + 3)
a[0]为int [4]
&a[0] 为 int * [4],
&a[0] + 3 等价于&a[3]
*(&a[0] + 3) 等价于a[3]

发表于 2018-06-04 20:53:52 回复(0)
a+1表示a[1],是一个一维数组,也表示一个指向该一维数组的指针,前面加星,表示取指针指向的值,指针指向的值是该一维数组的地址,即a[1][0]的地址,偏移两个位置,表示a[1][2]的地址,前面加星表示取地址指向的值,即a[1][2]的值
发表于 2022-08-18 23:02:13 回复(0)
c选项只是移动了 、没有降维
发表于 2022-01-24 23:46:46 回复(0)
答案:C
int a[3][4];

A,这里a只是一个一级指针,并不是***数据就是多级指针,所以A选项不正确
B,*(a+1+2)等于*(a+3)也等于a[0][3]
C, 这里a[0]是个长度为4的一维数组,所以&a[0]+1表示 a[1]的地址
   然后(&a[0]+1)[2]表示a[1]地址向后偏移两个int数之后的数值,也就是a[1][2]
D, *(a[0]+1)表达是错误的,因为a[0]本身是数值,不是指针,不能加一之后取内容
编辑于 2015-04-20 11:08:04 回复(4)
*(a+1)第一维度的第二行数组的第一个元素的首地址
发表于 2023-10-17 21:11:31 回复(0)