首页 > 试题广场 >

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
数组A一共2行3列,第0行为123,第1行为456
A[1][0]为第1行第0列数字4
*(A+1)指向数组第1行第0个元素
*(A+1)+1指向数组第1行第1个元素
再取*则为第1行第1个元素的值5
因此为4,5
发表于 2017-02-16 19:23:35 回复(4)
首先 int A[2][3] = {1,2,3,4,5,6};可以写成这样的形式 int A[2][3] = {{1,2,3}, {4,5,6}}; 这样就看的更清晰了.
A 是二维数组名, 在参与运算时候会退化成指针.      A这个指针的值和 二维数组中第00个元素的地址一样,即   A   ==   &A[0][0] (注意这里很重要是在数值上),   *A表示第0行的行首地址, 那第0行首地址跟A[0][0]的地址也一样, 所以      在数值上    A  ==  &A[0][0] = *A ,但是他们表示的含义不一样.   
A表示二维数组的首地址
&A[0][0]表示二位数组下标为[0][0]元素的地址
*A表示二维数组下标为0行的首地址.
那这个清晰之后,后面就可以解释了.      比如  A == &A[0][0] == *A == 0x0028F724,  那么**A 就知道是二维数组的下标为00的值,即 **A == 1,     因为二维数组是按行存储,所以 A + 1 表示增加一个行的字节数, 因此需要在A的基础上增加12个字节, 即C, 所以 A + 1 为0x0028F730,   *(A+1)表示下标为1的行首地址,因此也是  0x0028F730,    即    A+1  = *(A+1) = 0x0028F730
*(A+1) + 1 表示往后面增加一个元素的字节数, 即实际为[1][1]的元素的地址, 所以  *(*(A+1) + 1) 就是5
发表于 2017-10-31 16:12:37 回复(2)
数组名有两重属性
1.数据结构的一个对象(数据结构为当前数组),在java中数组就是一个对象
2.某些情况下自动退化成指向第一个元素的常量指针
本题中:
A+1为指向第二个元素的常量指针
*(A+1)为第二个元素,(第二个元素为int [3],即{4,5,6})
同时对象名也是指向第一个元素的常量指针。
所以*(A+1)也是指向元素4的指针,
那么*(A+1)+1为指向元素5的指针。

发表于 2017-03-28 20:04:17 回复(0)
A是一个二维指针,A+1表示移动一行,*(A+1)是一个一维指针,*(A+1)+1表示移动一列
发表于 2018-01-09 10:54:58 回复(0)
当定义二维数组A[M][N]时,数组名可以认为是二维指针,其指向二维数组的首地址。
于是A的值就是首地址的值。
而*A,就是A[0],A[0]是第一行的标记,代表第一行的首地址。
所以*A还是一个指针但是类型和A不同。
A+1,地址加一行。
*A+1,地址加一个元素。
*(A+1)+1指向数组第1行第1个元素。
*(*(A+1)+1)取到A[1][1]

发表于 2018-03-17 11:51:14 回复(0)
将int[]A={1,2,3,4,5,6}理解成int A[2][3] = {{1,2,3}, {4,5,6}};  所以
A[1][0]=4 这个很容易理解,没毛病

*(*(A+1)+1) 需要拆解成:
数组名就是指针,所以A+1,即指针变量+1,同时*是取指针所指地址的值,所以
*(A+1) = {4,5,6},所以是一个一维数组,所以*(A+1) 还是一个数组,根据数组名是指针变量,则*(A+1)还是一个指针,所以
*(A+1)+1,即指针变量+1,指针地址指向下一个元素地址,即指向数组{4,5,6}第二个元素的地址,所以
*(*(A+1)+1)是取数组{4,5,6}第二个元素的地址内的值,所以
*(*(A+1)+1) = 5

"&" -------返回该变量的地址
"*" -------表示取该地址的内容
编辑于 2022-04-06 09:47:27 回复(2)
就是A[1][1]吧 A[i]=*(A+i)
编辑于 2017-01-04 23:20:01 回复(1)
*(A+i)表示A[i] *(*(A+i)+j)表示A[i][j]
发表于 2022-03-06 16:39:21 回复(0)
星号取元素 &取地址 数组名 2个作用 表地址 表整个数组 A数组 2行3列 下标号 ≠行列号 A 表整个数组 也可表第一个元素的地址 *(A+1) 0行+1行 0列 的元素4 的地址 *(*(A+1)+1) 1行 0列+1列 的元素 5的地址
发表于 2022-04-14 11:26:53 回复(0)
总结: 二维数组名 == &首个一维子数组名 ; * 二维数组名 == 首个一维子数组名 == 首个一维子数组的首元素地址
发表于 2019-04-08 15:57:46 回复(0)
*(*(A+1)+1) A表示数组的第一个元素,所以取A[0]的值,取1; A+1=1+1=2; *(A+1)——> *2取下标2的值为3; 再把3看作A计算,3+1=4,所以*(*(A+1)+1)——> *4取下标4的值为5;
发表于 2018-06-04 15:26:21 回复(0)
怎么感觉这个是c的题啊
发表于 2022-02-12 15:43:47 回复(0)
原数组为2行3列,即
1 2 3
4 5 6
A[1][0]为2行1列,那么为4
*(A+1)就是2行,*(A+1)+1就是2行2列元素的地址,在最外层加*,取地址对应的值,所以是5
发表于 2020-03-30 23:06:10 回复(0)


  数组名有两重属性

1.数据结构的一个对象,(数据结构为当前的数组),在Java中数组是一个对象。

2.某些时候属于名自动退化成指向第一个元素的常量指针

  *(A+1)表示二维数组得第二维元素*(*(A+1))+1表示第二维的第二个元素


  本题中:


  A+1为指向第二个元素的常量指针 

  *(A+1)为第二个元素,(第二个元素为int [3],即{4,5,6}) 

  同时对象名也是指向第一个元素的常量指针。 

  所以*(A+1)也是指向元素4的指针,



  那么*(A+1)+1为指向元素5的指针。



  



发表于 2018-07-30 08:17:54 回复(0)
我做的时候看不到这题题目
发表于 2017-04-05 10:01:46 回复(0)
对A修改只改了第一层数组
发表于 2023-11-15 12:32:23 回复(0)
*(A+1) 指向数组的第一行(行数从0开始) *(( A+1)+1) 指向数组第一行的第二个元素即A[1][1]
发表于 2023-11-13 18:34:34 回复(0)
注意是二行三列!!!
发表于 2023-10-09 10:54:47 回复(0)
可以理解为二维数组是一个存储着一维数组指针的数组
发表于 2023-06-30 22:39:10 回复(0)
C语言中有a &a *a
a    代表读取当前储存单元中的字面数据量
*a   代表读取当前储存单元的地址值
&a  代表将当前储存单元中的字面数据量当作地址值去读取
发表于 2022-08-01 10:38:19 回复(0)