首页 > 试题广场 >

int A[2][3]={1,2,3,4,5,6};,则A[

[单选题]
int A[2][3]={1,2,3,4,5,6};,则A[1][0]和*(*(A+1)+1)的值分别是()
  • 4 5
  • 4 3
  • 3 5
  • 3 4
推荐
答案:选A
答案解析:
假设给一个一维数组 int a[5]; 首先要明白 a 和 &a 的意思,他们地址值一样,可以理解把a理解安徽的省会合肥市,&a理解为安徽省,那么a+1的值就是安徽省里的其他市比如安庆市;&a+1理解为安徽的邻省比如江苏省,所以&a+1可能就输出一个不确定的数了。
在二维数组里也是一样,int A[2][3](这个数组其实可以看做有两个一维数组,每个一维数组里有3个元素,a[1][2]就是指向第二个一维数组的第三个元素),A+1的话代表A[0](这是二维数组里的第一个含有3个元素的一维数组)下一个的一维数组A[1],而&a+1就是一个不确定的数了;
那么(1)A[1][0]就是4;
*(*(A+1)+1);*(A+1)指向a[1]这个一维数组,也即指向4,然后+1(加4个字节)就是指向下一个元素5,然后*运算就是输出5;
编辑于 2015-02-06 10:08:31 回复(12)
回答一下*(*(A+1)+1)为什么等于5.     A+1中的A可以看做一个二级指针**A,这里+1,相当于将A指针向后移动一个一维数组大小的内存空间,即A+1指向的是A[1],也是A[1][0]。*(A+1)+1,这里+1,相当于将指针向后移动一个数组元素的内存空间,即指向A[1][1];所以输出5。
发表于 2015-09-18 21:15:49 回复(5)
A是第一行的首地址,A+1就是第二行的首地址,*(A+1)就是A[1],即第二行第一个元素的地址,再+1,就是第二行第二个元素的地址,*号表示取这个地址的值,所以...
发表于 2017-03-18 19:56:38 回复(4)
我一个Java的做这种题目心好累啊
发表于 2017-05-21 10:06:12 回复(0)
*(A+1)就是选择数组第二列的首个元素地址&A[1][0] (*(A+1)+1)就是指向当前行的下一个元素&A[1][1] 外面再加个*,就是把值取出来的意思
编辑于 2015-09-18 20:55:19 回复(0)
数组在C++中是按照行来存储的,也就是说int A[2][3]在计算机存储中相当于有两行每行3个数组;
A[0]={1,2,3};
A[1]={4,5,6};
其中数组名成就是数组的首个值的地址,就是A=&A[0][0],即*A=A[0][0];
这里还有一点需要注意,*A+1和*(A+1)是不同的。*A+1是数组的第一个值加上1,相当于A[0][0]+1=2;
但是*(A+1)则表示地址A加上1,就是第二行,*(A+1)+1=A[1]+1=&A[1][1]=5;
其实更***度的数组也是如此。记住,数组名就是数组的首地址,按照行存储。
发表于 2017-03-01 15:53:53 回复(1)
A为两行三列,
第一行 1 2 3
第二行 4 5 6
求解A[1][0]和A[1][1],也就是4 和 5.
发表于 2016-05-11 23:02:03 回复(0)
A 第一行首地址
*(A+1)第二行元素
*(*(A+1)+1)第二行第二个元素
发表于 2018-08-10 19:42:58 回复(0)
A是一维数组的地址,A+1则指向第一个一维数组的下一个地址即A[1]
发表于 2017-04-19 23:02:09 回复(0)
  • A[2][3]为两行三列,
    第一行 1 2 3
    第二行 4 5 6  
  • A是第一行的首地址,A+1就是第二行的首地址,*(A+1)就是A[1],即第二行第一个元素的地址,再+1,就是第二行第二个元素的地址,*号表示取这个地址的值,所以 求解A[1][0]和A[1][1],也就是4 和 5
  • 发表于 2017-03-20 21:12:04 回复(1)
    *(*(A+1)+1);*(A+1)指向a[1]这个一维数组,也即指向4,然后+1(加4个字节)就是指向下一个元素5,然后*运算就是输出5;
    发表于 2019-08-25 00:52:36 回复(0)
    选 A
    这是一个两行三列的二维数组,A[1][0]是第二行的第一个元素
    *(*(A+1)+1)是一个二维数组指针,其中*(A+1)表示第二行元素的地址,*(A+1)+1是第二行第二个元素的地址,*(*(A+1)+1)就是第二行第二个元素的值。
    发表于 2018-05-15 17:03:07 回复(0)
    A+1是第二行的首地址。。
    发表于 2018-04-08 13:18:54 回复(0)
    行列不要理解反,OK?
    发表于 2018-04-04 14:06:55 回复(0)
    A=[[1,2,3],[4,5,6]]
    所以A[1][0]指的是第二行得一个数字;
    A表示A[0][0],A+1表示A[1][0],*(*(A+1)+1)表示A[1][1];

    发表于 2018-03-08 17:16:08 回复(0)
    A+1是指加一行
    发表于 2018-03-06 17:39:10 回复(0)
    一维数组对应一维指针 二维数组对应二维指针 三维数组对应三维指针
    发表于 2017-11-09 08:01:52 回复(0)
    考察二维数组的指针
    发表于 2016-09-07 16:52:28 回复(0)
    我来尝试着解释一下,完全可以把A看做一个指针的指针,即**A,想想指针的指针在C语言中的定义,就是A指向的内存单元中存放的是一个地址,如下图所示,而*(A+1 )实际上代表A[1](相当于指针降维),而A[1]是二维数组的第二行起始处的地址,以此类推。

    编辑于 2016-07-27 17:51:38 回复(0)
    两行三列!
    发表于 2015-05-25 14:40:50 回复(0)
     *(*(A + 1) + 1)  不明白这个表达式的含义, 谁可以解释一下? 
    发表于 2014-12-15 16:40:46 回复(2)