数组(1)
来源:互联网 发布:淘宝用户需求分析 编辑:程序博客网 时间:2024/05/17 19:58
本节学习要点
1,数组查询和写入的速度快,可以直接通过索引找到元素。
2,数组的每个元素之间没有空隙,都是紧挨着排列的,占用连续内存,数组比较大时,容易造成栈溢出
3,越界访问元素时会改变其他变量值或者造成访问异常程序崩溃
数组是最简单的数据结构,顾名思义,就是一组数的集合。
我们通常认为数组是像下面这样构成的。
一维数组:
二维数组:
三维数组:
立方体
四维数组: ?? 这个真想像不出来,因为人类就没有见过4为的世界。
但是计算机上怎么存储多维数组的呢?其实很简单,都是把多维转化为1维来顺序存储的。
我们写个代码看看实际存储情况。
一维数组:
int main(void){int array_1dimension[16] = {0};for(int i = 0; i < 10 ; i++){cout << "str_array [" << i << "] elment adress is :" << &str_array[i] << endl;}return EXIT_SUCCESS;}
输出结果:
array_1dimension [0] elment adress is :0xffffcaa0array_1dimension [1] elment adress is :0xffffcaa4array_1dimension [2] elment adress is :0xffffcaa8array_1dimension [3] elment adress is :0xffffcaacarray_1dimension [4] elment adress is :0xffffcab0array_1dimension [5] elment adress is :0xffffcab4array_1dimension [6] elment adress is :0xffffcab8array_1dimension [7] elment adress is :0xffffcabcarray_1dimension [8] elment adress is :0xffffcac0array_1dimension [9] elment adress is :0xffffcac4array_1dimension [10] elment adress is :0xffffcac8array_1dimension [11] elment adress is :0xffffcaccarray_1dimension [12] elment adress is :0xffffcad0array_1dimension [13] elment adress is :0xffffcad4array_1dimension [14] elment adress is :0xffffcad8array_1dimension [15] elment adress is :0xffffcadc
我们可以清楚的看到数组每个元素的地址的按照4个字节的顺序的偏移。这可以说明如下两个问题。
1,int类型的长度是4个字节
2,数组的每个元素之间没有空隙,都是紧挨着排列的。也就是说我们可以根据元素个数的索引算出元素的地址。
因为我们可以根据索引来读取数组的值,索引读取时不需要去检索数据位置,一般情况的检索时间复杂度为O1。
由于栈空间有限,在栈中定义大数组可能会造成栈溢出。这个问题的详细我会在【xxxxx】里说明。
那么我们再看看二维数组:
int main(void){int array_2dimension[2][8] = {0};for(int i = 0; i < 2 ; i++){for(int j = 0 ; j < 8 ; j++){cout << "array_2dimension [" << i << "," << j <<"] elment adress is :" << &array_2dimension[i][j] << endl;}}return EXIT_SUCCESS;}
输出结果:
array_2dimension [0,0] elment adress is :0xffffcae0array_2dimension [0,1] elment adress is :0xffffcae4array_2dimension [0,2] elment adress is :0xffffcae8array_2dimension [0,3] elment adress is :0xffffcaecarray_2dimension [0,4] elment adress is :0xffffcaf0array_2dimension [0,5] elment adress is :0xffffcaf4array_2dimension [0,6] elment adress is :0xffffcaf8array_2dimension [0,7] elment adress is :0xffffcafcarray_2dimension [1,0] elment adress is :0xffffcb00array_2dimension [1,1] elment adress is :0xffffcb04array_2dimension [1,2] elment adress is :0xffffcb08array_2dimension [1,3] elment adress is :0xffffcb0carray_2dimension [1,4] elment adress is :0xffffcb10array_2dimension [1,5] elment adress is :0xffffcb14array_2dimension [1,6] elment adress is :0xffffcb18array_2dimension [1,7] elment adress is :0xffffcb1c
我们可以看到二维数组也和一维数组一样,都是把地址顺序偏移下去。也就是书二维数组的结构图是如下所示。
阅读全文
0 0
- 数组(1)
- 数组1
- 数组1
- 数组1
- 数组1
- 数组1
- 数组1
- 数组1
- 数组1
- 数组1
- 1、数组
- 数组1
- 数组(1)
- 数组1
- 数组1
- 【数组1】-二维数组查找
- NumPy数组(1、数组初探)
- NumPy数组(1、数组初探)
- JAVA-----JNI调用小bug
- Android-屏幕适配全攻略(一)
- 解决Git建立远程分支关联时fatal the current branch master has no upstream branch 问题
- Python os.chdir() 方法
- [源码]Elasticsearch源码4(选举机制)
- 数组(1)
- Bentley.Hammer.XM.v08.09.400.34 1CD(水锤和瞬态分析软件)好用版\
- SVN不小心删除了服务器上的文件夹解决办法
- 持续集成之③:将代码自动部署至测试环境
- java3
- 在ubuntu下安装配置phabricator
- java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
- [源码]Elasticsearch源码5(2.x插件开发)
- 前端网址分享