数组 内存结构

17.1 数组与内存

变量需要占用内存空间,内存空间有地址。不同数据类型的变量,可能占用不同的内存大小及有不同的内存结构。

以前我们所学都称为“简单数据类型”,如:int,char,float,double,bool。像 char,bool,只占用一个字节,所以我们不去管它的的“结构”,其余如int,float,double占用多个字节,但比较简单,适当的时候我们会去探讨4个字节是如何组成一个整数。

后来我们学习了数组。数组变量占用内存的大小是不定的,因为不同的数组变量除了类型可以不同,还可以拥有不同个数的元素,这两点都影响它的大小。

 

因此,数组是我们第一个要着力研究它的结构的数据类型。和后面我们还要学习的更多数据类型相比,数组的结构还是相当简单的。简单就简单在它的各个元素大小一致,整整齐齐地排列。

 

17.1.1 数组的内存结构

变量需要占用内存空间,内存空间有地址。

 

声明一个整型变量

 

int a;

 

系统会为该变量申请相应大小的空间,一个int类型的变量时,需要占用4个字节的空间,如下图:

数组 内存结构

也就是说,一个 int 类型的变量,它的内存结构就是 “4个连续的字节”。

 

当我们声明一个数组:int arr[100];

 

我们可以想像,arr数组在内存中占用了100 * sizeof(int) 个字节。

 

现在请大家打开Windows的画笔程序,家画一个数组的内存结构示意图。

 

17.1.2 数组的内存地址

 

一个int类型变量,占用4个字节的内存,其中第一个字节的位置,我们称为该变量的内存地址。

同样,一个数组变量,占用一段连续的内存,其中第一个字节的位置,我们称为该数组变量的内存地址。

 

还记得 & 这个符号吗?通过它我们可以得到指定变量的内存地址。

 

int a;

cout << &a << endl;

 

& 称为“取址符”。如果你有点记不清,可以查看以前的课程。

 

本章第一个需要你特别注意的内容来了:

查看数组变量的地址,不需要使用 & 。下面的话是一个原因也是一个结论,你必须记住。

 

C,C++语言中,对数组变量的操作,就相当于直接对该数组变量的地址的操作。

 

因此,想要查看一个数组变量的地址,代码为:

 

int arr[10];

cout << arr << endl;  //注意,arr之前无需 &

 

现在,请大家打开CB,然后将上面代码写成完整的一个控制台程序,看看输出结果。

 

17.1.3 数组元素的内存地址

 

一个数组变量包含多个连续的元素,每一个元素都是一个普通变量。因此,对就像对待普通变量一样可以通过&来取得地址:

 

//查看数组中第一个元素的地址:

int arr[10];

cout << &arr[0] << endl;

 

例一:

现在,请大家在CB里继续上一小节的代码,要求:用一个for循环,输出数组arr中每一个元素的地址。

如果你已完成,现在来看我的答案。

 

#include <iostream.h>

...

int arr[10];

 

for(int i=0; i<10; i++)

    cout << &arr[i] << endl;

...

cin.get();

 

我们把它和前面输出数组地址的例子结合起来,然后观察输出结果。

 

...

int arr[10];

 

//输出数组的地址:

cout << "数组arr的地址: " << arr << endl;

 

//输出每个元素的地址:

for(int i=0; i<10; i++)

    cout << "元素arr[" <<i <<"]的地址:" << &arr[i] << endl;

 

...

 

输出结果:

数组 内存结构

 

第一个要注意的的是头两行告诉我们,整个数组变量arr的地址,和第一个元素arr[0],二者的地址完全一样。

事实上,数组和元素,是对同一段内存的两种不同的表达。把这一段内存当成一个整体变量,就是数组,把这段内存分成大小相同的许多小段,就是一个个数组元素。

 

请参看下图:

数组 内存结构

(分开一段段看是一个个元素,整体看称为一个数组,但二者对应的是同一段内存)

 

 

 

原文链接: https://www.cnblogs.com/silva/archive/2010/09/09/1755336.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    数组 内存结构

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/14855

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月7日 下午2:39
下一篇 2023年2月7日 下午2:40

相关推荐