二维数组又包含多个一维数组,a指向第一个一维数组的首地址就还是地址。
a+bai1应该是 (a+0)+1
这里的a是二维数组中的二级指针
数组名为a[0]的一维数组(表示行)
也是数组名为a的一维数组(表示列)
后面的1表示行数组移动1行
0表示列的移动
所以是1行0列的地址
*(a+1)中a是二级指针
取值二级指针是一级指针
一级指针指向的一维数组(二维数组中的行)
一维数组移动一位只能是向下移动也就是行
所以就是 第一行的首地址,也就等于二维数组中,第一行零列的地址。
扩展资料:
二维数组A[m][n],这是一个m行,n列的二维数组。设a[p][q]为A的第一个元素,即二维数组的行下标从p到m+p,列下标从q到n+q,按“行优先顺序”存储时则元素a[i][j]的地址计算为:
LOC(a[i][j]) = LOC(a[p][q]) + ((i − p) * n + (j − q)) * t
按“列优先顺序”存储时,地址计算为:
LOC(a[i][j]) = LOC(a[p][q]) + ((j − q) * m + (i − p)) * t
存放该数组至少需要的单元数为(m-p+1) * (n-q+1) * t 个字节 [1]
参考资料来源:百度百科-二维数组
额 没看懂
追答就比方说, 一头猪吃了一颗草, 然后一条狼把那头猪吃了(整个), 然后人去解剖那只狼, 解剖了一层发现了一头猪, 然后又解剖, 又发现了一颗草.
这和那是一个道理.
int a[10][20], 它定义了一个长度为10的数组, 其中数组中的每个元素又是一个长度为20的数组, 这个数组的每个元素是int型.
还可以理解成一个班里有几组, 然后组再往下的才是人. 一个班是一个集体, 一个组也是一个小集体.
C语言中的二维数组里a+1和*(a+1)为什么都是地址
一维数组移动一位只能是向下移动也就是行 所以就是 第一行的首地址,也就等于二维数组中,第一行零列的地址。
c语言二维数组与指针,我想知道为什么*(a+1).与显示中的a+1,所给出的...
二维数组是两层指针,这个你该明白 (*(a+i)+j)这个是表示i行的第j个数据,注意啊,是两个 要是不理解,记住套用即可 一个*是指针 所以ij都是指针 a+1是一个指针,表示第1行的首地址(c中数组时从0开始计数的)在二维数组中,a,a[0],&a[0][0]这三个指针虽然都是a的首地址的值,...
c语言中a+i是地址吗,书上说a+i是a[i]的指针,既然这样,那么*(a+i)为什...
a+i其实就是&a[i],肯定是地址 (a+i)其实就是a[i],如果a是二给数组的数组名,a[i]就肯定是地址(等同于&a[i][0]),如果a只是一维数组(指针数组除外)的数组名,a[i]就不是地址(原因是:二维数组可以看作是多个一维数组组成,即数组的数组)(a+i)+j就是&a[i][j],如果数组a是二维...
C语言、二维数组指针中的 * 和 &
我看了你说的这两页,书上的原话是这样的:“在二维数组中,a+i,*(a+i),&a[i],&a[i][0]的值相等,即他们都是同一地址值”,要注意这个字眼“地址值”,也就是说,这几种表达方式并不是内存中存的数值,而是存放数组的地址的值,首先要弄明白,首地址这个概念,如果只写数组名,就代表...
关于二维数组中的一个问题...高手进!
a+1是&a[1],是a[1]的地址,而*(a+1)是a[1],是a[1][0]的地址,因为二者都在数组a[][]的首位置,数值必然是相等的,但是很明显,a[1]和a[1][0]类型是不一样的.换个角度:int i = 0;int *p = 0;那么,能说p等价于i么?不能,虽然数值相同,但是二者的含义却是完全两样的....
在二维数组里 地址a[i]和地址*(a+i)的问题
a[i]和*(a+i) 表示的是同一个地址,对于数组来说,计算机计算地址都是以*(a+i)进行计算,也就是换算成指针的形式.对于二维数组,你要搞清楚所取的地址是对谁而言的.很显然,a[i]是第i行的地址,这是相对于行而言的,也就是说,a[i+1]就是下一行的地址了.&a[i]是不一样的,首先,a[i]是...
*(a+i)与a[i]是一样的地址,为什么?
*(a+i)与a[i]是一样的地址应该是说他们指向的都是同一个内存单元,也就是说*(a+i)指向的值的地址,与a[i]指向的值的地址都是一样的。也就是说他们得到的值是一样的。这里不是说他们得到的是一个内存变量的地址还是内存变量的值,只是说明他们是一样的,得到的值一样,换句话说就是一样的地址。(一样...
c语言中二维数组地址疑问
用指针法表示。a[0]为一维数组名,该一维数组中 序号为1的元素显然可以用a[0]+1来表示,见图6.16。欲得到a[0][1]的值,用地址法怎么表示呢?既然 a[0]+1是a[0][1]元素的地址,那么,*(a[0]+1) 就是 a[0][1]元素的值。而a[0]又是和*(a+0)无条件等价 的,因此也可以用*(...
C语言中 a+1和&a+1的理解
这里的a=&a[0][0];a+1=&a[1][0],也就是过了一个a[0][1],因此是加了8个字节 &a+1是跳过整个数组的地址,也就是加了16字节
C语言地址运算问题
二维数组的各个地址是这样的:比如定义了一个数组a[][],a能够为数组的一行代言,a+1就向后走一行变成a[1]了,也就是a[1][0]的地址,a[i]是以单个的元素为单位进行管理的,那么a[i]+1就是以a[i][0]为起始点向后走一个元素所占的字节数,即a[i][1]的地址。