数组
来源:互联网 发布:64式轻坦性能数据 编辑:程序博客网 时间:2024/06/09 23:25
环境:VC6
如何识别数组
- 比例因子寻址
- 循环处理(通常在商业项目中,循环和数组都是成对在一起的)
一维数组
#define NUM 32int main(int argc, char* argv[]){ int i; int ary[NUM]; scanf("%d", &i); printf("%p\r\n", ary[i]); return 0;}
定义一个一维数组 type ary[], ary[n] 的寻址公式可用以下伪代码表示:
(int)ary + sizeof(type) * n
Debug版 和 Release版 使用公式的形式是一样的。从图中,可以判断数组的基址为 esp + 8ch + var_80
其中 +8ch 是对变量 var_80 的调整,不必过于在意。esp + 8ch + var_80 可以理解为变量 var_80 在栈中的位置。
二维数组
#define NUM 32int main(int argc, char* argv[]){ int i; int j; int ary[NUM][NUM]; scanf("%d", &i, &j); printf("%p\r\n", ary[i][j]); return 0;}
定义一个二维数组 type ary[M][N],ary[i][j] 的寻址公式可用以下伪代码表示:
公式一: (int)ary + sizeof(type[N])*i + sizeof(type)*j =>进一步转换为公式二: (int)ary + sizeof(type)*(i*N + j)
在 Debug 版中,采用公式一进行数组寻址:
在 Release 版中,采用公式二进行数组寻址:
三维数组
#define NUM 8int main(int argc, char* argv[]){ int i = 1; int j = 2; int k = 3; int ary[NUM][NUM][NUM]; scanf("%d", &i, &j, &k); printf("%p\r\n", ary[i][j][k]); return 0;}
定义一个三维数组 type ary[M][N][L],ary[i][j][k] 的寻址公式可用以下伪代码表示:
公式一: (int)ary + sizeof(type[N][L])*i + sizeof(type[L])*j + sizeof(type)*k=>进一步转换为公式二: (int)ary + sizeof(type)*(L*(i*N + j) + k)
在 Debug 版中,采用公式一进行数组寻址:
在 Release 版中,采用公式二进行数组寻址:
其他
数组在内存中的分布
无论在栈还是在全局中,数组从低地址往高地址排列
阅读全文
0 0
- 数组
- 数组
- 数组
- 数组
- 数组
- 数组
- 数组
- 数组
- 数组
- 数组
- 数组
- 数组
- 数组
- 数组
- 数组
- 数组
- 数组
- 数组
- ffmpeg精简1
- Lua元表中__index元方法的作用
- 人工智能从入门到精通(10)
- CloudCompare 编译
- 菜鸟shell 脚本学习日记
- 数组
- laravel 课程学习系列一----------------第一章.composer快速入门
- scikit-learn 中文文档-协方差估计-无监督学习|ApacheCN
- EasyDSS RTMP流媒体解决方案之直播录像自动清理方案
- HDOJ 2535 Vote(水题)
- Eclipse添加更多提示
- Python入门
- hibernate系列八:一对多关联配置及案例
- SSD: Single Shot MultiBox Detector解读