二维数组的计算流程一个二维数组int a[i][j]对二位数组访问应该占用的时钟周期长点吧?a[1]应该就是#define a[1] 内存地址一样吧?但是int i=1;int *prt=&a[i][j];是CPU怎么计算的呢?如果i=2,CPU是不是计算
来源:学生作业帮助网 编辑:作业帮 时间:2024/11/08 20:41:05
二维数组的计算流程一个二维数组int a[i][j]对二位数组访问应该占用的时钟周期长点吧?a[1]应该就是#define a[1] 内存地址一样吧?但是int i=1;int *prt=&a[i][j];是CPU怎么计算的呢?如果i=2,CPU是不是计算
二维数组的计算流程
一个二维数组int a[i][j]
对二位数组访问应该占用的时钟周期长点吧?
a[1]应该就是#define a[1] 内存地址一样吧?
但是
int i=1;
int *prt=&a[i][j];
是CPU怎么计算的呢?
如果i=2,CPU是不是计算时*prt=a的首地址+i*j+j
有人说C语言中没有多维数组,是这样的吗?
二维数组的计算流程一个二维数组int a[i][j]对二位数组访问应该占用的时钟周期长点吧?a[1]应该就是#define a[1] 内存地址一样吧?但是int i=1;int *prt=&a[i][j];是CPU怎么计算的呢?如果i=2,CPU是不是计算
C语言是没有多维数组的,多维数组都是可以用一维数组来表示的.整个存储空间可以看成一个巨大的一维数组.
比如你提到的二维数组a[i][j] ,是在内存中4*i*j字节长度的一维数组,这个一维数组分成i部分,每部分有j个元素
访问多维数组和访问一维数组一样,最终编译生成的机器码都只需要一条指令,即首地址加偏移,偏移量是在编译过程中就计算好了的.
; 7 :\x05a[1][3] = 0x456;
0002a\x05c7 45 ec 56 04
\x0500 00\x05\x05 mov\x05 DWORD PTR _a$[ebp+28],1110 ; 00000456H
; 8 :\x05b[2] = 0x123;
00031\x05c7 45 cc 23 01
\x0500 00\x05\x05 mov\x05 DWORD PTR _b$[ebp+8],291 ; 00000123H