作业帮 > 综合 > 作业

c语言中的二维数组a[a][j]可以表述为*(*(a+1)+j),但是我看不懂这个东西啊

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/28 09:06:40
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)”这个题设本身是错误的,不要被其误导.