数组(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

我们可以看到二维数组也和一维数组一样,都是把地址顺序偏移下去。也就是书二维数组的结构图是如下所示。


原创粉丝点击