发布网友 发布时间:2022-04-20 06:21
共4个回答
热心网友 时间:2023-07-18 22:48
哈哈哈哈,太可爱了
a[x][y]叫做数组形式,其中第一个维度为行标,第二个维度叫列标,本来描述的就是一个矩阵平面。你可以看作多个列组成的,也可以看成多个行组成的,但编译器通常按照习惯,是按行存储在内存中的,即一行数据在内存中是连续的,紧挨着的是下一行第一个元素,因为这样符合数组下标顺序描述:左行右列,即先行后列。
如果有int a[x][y],实际上你可以看作 ( int [y] ) a[x],意思为a是个一维数组,其元素类型为int [y],即y个int数据组成一行。因此 a[1] 代表第二行所有数据(见附图标*的),一个量代表多个数据不就是指针嘛,而a[4][3]代表单一元素(见附图蓝色单元)。
好好琢磨一下吧,其他我就不扩展了,怕你绕进去。
热心网友 时间:2023-07-18 22:48
首先,对待新知识要尝试接受,而不是抵制。
其次,我们用教室里的座次(第几行第几列)来解释。例如,“坐在第3行第2列的人”,是一个明确的定义、代表着坐在那里的人,是一个实体。“第3行第2列”是一个座位,不代表个体,是一个地址。如果只说“第三行的人”,那么无法代表任何坐在那里的个体,这种情况下也是地址。
热心网友 时间:2023-07-18 22:49
一维数组 a=[1,2,3,4,5] 就对应 a[0]=1 ,a[1]=2,a[2]=3
二维数组就是原本 a[0]=1, 现在a[0] 这里面变成是存放了数组 a=[[0,1,2,3,4],[5,5,5,5,5] ]
所有a[0]=[0,1,2,3,4] 同理 a[0][0]=0 ,a[0][1]=1
大概 就是这个意思吧
热心网友 时间:2023-07-18 22:49
这说明,你没看到定义的部分.没有定义就没有明确的方向.
二维数组a[2][3]
把数组a看成是一个二个元素的一维数组 即a[0], a[1]
很明显画图看一下, 就能得到a[0] 里包含了3个整型元素
同理a[1]也包含了3个整型元素.
把这每三个元素看成一个a[0], 和一个a[1], 明显a[0], a[1] 也是相邻排列的
再把a[0] 和 a[1] 看作二个一维数组,各自包含三个整型元素
这个时候就需要明确的定义了,即概念就是这样,记住就可以
a[0], 和a[1] 是这二个一维数组的数组名, 也就是首地址
=====================================================
最后从头分析, 数组名a 指向一个一维数组 , 包含元素a[0] , a[1] ,那么数组元素是什么类型的? 是int[3] 类型的. 这个一维数组元素的类型是int[3]类型的(这也是定义, 理解层面就是说, a[0] 作为一维数组的一个元素, 他的类型是int[3] , 因为a[0]作为一维数组名看待, 他其中还包含了3个整型的元素 )
那么这个a作为指针, 他的类型也是int[3] 类型的
数组名a 就是第一个元素的首地址, 也就是说a = &a[0];
用中文说就是a指向a[0], 也就是a的内容是a[0]的地址,a保存了a[0]的地址
那么*a 就是 a[0] 的内容 ,*a = a[0], 在a的基础上++, 也就是移动int[3] 的字节距离, 是移动整行. 即(a + 1) 指向 a[1] , 取内容, 得*(a + 1) = a[1] , 这也就是所谓的行指针
与行的移动就是*(a + i) = a[i]
a[0] 的值是什么, *a , 那么a[0]作为一维数组的数组名指向的是谁
指向a[0][0], 也就是说说*a 指向 a[0][0] 那么, 再取内容, 也就是**a 等于a[0][0] 的内容
一般式就是 具体到行 (a + i) 指向 a[i] 推出*(a + i) 等于a[i]
再具体到列 , *(a + i) + j 指向 a[i][j] 推出 *(*(a + i) + j) 等于 a[i][j]