c语言中的二维数组a[a][j]可以表述为*(*(a+1)+j),但是我看不懂这个东西啊
来源:学生作业帮 编辑:神马作文网作业帮 分类:综合作业 时间:2024/09/21 00:34:25
c语言中的二维数组a[a][j]可以表述为*(*(a+1)+j),但是我看不懂这个东西啊
这个表述是有问题的,*(*(a+1)+j)没有规定首地址,*(a+1)已经表示a+1地址中的数据了,明显与数组概念不合.
a[a][j]里面数组名称和一个维度的数组的个数表示重叠了,所以我换一种方式来表示:a[y][x].为了便于理解,假定y=3,x=2.在数组中的数据有y行,x列;也就是3行,2列.假定第一行数据为{1,2};第二行数据为{3,4};第三行的数据为{5,6},那么数组a在内存中的数据为从首地址开始的连续6个数据,{1,2,3,4,5,6}.假定首地址为0x01,那么a[0][0]的地址为0x01,对应数据“1”,该可以表示为((行数 + 0x01)+ 列数),该地址的数据可以表示为*((行数 + 0x01)+ 列数),这个表示形式,和题目中的比较接近.以此类推,a[0][1]的地址为0x02,对应数据“2”;a[1][1]为第2行第2列,地址为0x04,对应数据0x04.
由此可以看出a[y][x]可以表示为*((x + &a) + y);&a为数组a的首地址.
不知道这样讲您是否能够理解.同时“c语言中的二维数组a[a][j]可以表述为*(*(a+1)+j)”这个题设本身是错误的,不要被其误导.
a[a][j]里面数组名称和一个维度的数组的个数表示重叠了,所以我换一种方式来表示:a[y][x].为了便于理解,假定y=3,x=2.在数组中的数据有y行,x列;也就是3行,2列.假定第一行数据为{1,2};第二行数据为{3,4};第三行的数据为{5,6},那么数组a在内存中的数据为从首地址开始的连续6个数据,{1,2,3,4,5,6}.假定首地址为0x01,那么a[0][0]的地址为0x01,对应数据“1”,该可以表示为((行数 + 0x01)+ 列数),该地址的数据可以表示为*((行数 + 0x01)+ 列数),这个表示形式,和题目中的比较接近.以此类推,a[0][1]的地址为0x02,对应数据“2”;a[1][1]为第2行第2列,地址为0x04,对应数据0x04.
由此可以看出a[y][x]可以表示为*((x + &a) + y);&a为数组a的首地址.
不知道这样讲您是否能够理解.同时“c语言中的二维数组a[a][j]可以表述为*(*(a+1)+j)”这个题设本身是错误的,不要被其误导.
c语言中的二维数组a[a][j]可以表述为*(*(a+1)+j),但是我看不懂这个东西啊
C语言二维数组a[i][j],为什么a[1]和*(a+1)等价啊?*(a+1)为什么会是一个地址?弄糊涂了,
C语言 二维数组问题 a[i][j]中 i是列数,j是行数,那么a[0][1]又是怎么理解?
一道C语言的题.若二维数组a有m列,则计算任一元素a[i][j]在数组中位置的公式为?
若二维数组a有n列,那么a[i][j]前元素个数为:A i*n+j+1 B i*n+j-1 C i*n+j D j*n+
.二维数组a有m列,则在a[i][j]之前的元素个数为:.A) j*m+i B) i*m+j C) i*m+j-1 D)
为什么一维数组a[i]指针p,可以有p=a;但是当二维数组a[i][j]时却不可以p=a
C语言中 二维数组@a[i][j]的地址为什么可以表示成*(a+i)+j难道*(a+i)还表示一个地址的值?求高手详细解
C语言中二维数组a[i][j]中,a+i=*(a+i)=a[i]=&a[i]是怎么理解的.
将一个二维数组行和列的元素交换这个代码中,b[j][i]=a[i][j]
【求助c语言】已知int a【2】【3】,则对数组元素a【i】【j】的地址表述错误的是
若有二维数组a的说明:var a:array[0..m,0..n]; 则计算数组a的任意元素a[i][j]在数组中的位置