【C++】结构数据类型-数组

【C++】构造数据类型--数组

数组是一组在内存中一次连续存取的,具有同一类型的数据变量所组成的集合体,它在内存中占用一段连续的空间。其中的每个变量成为数组元素,属于同一数据类型,数组元素用数组名与带方括号的数组下标一起标识。谈数组,我们从四个方面谈起。数组的定义,初始化,存取,数组地址的求得。而数组可以是一维数组,二维数组和多维数组,我们从最基本的一维数组说起,其他维数组通过一维数组可以推得。

一.一维数组

1.数组定义

【C++】结构数据类型-数组

数据类型相同的简单变量和数组可以一起定义。 例如:Int x,a[20]

定义数组时,还可以用类型定义typedef为数组类型取一个名字,格式为:

typedef 数据类型 数组名[常量表达式];

typedef int A[5]; //A是一个类型名,数组类型;

A  b[5]; //b是数组对象;

2.数组初始化

【C++】结构数据类型-数组

函数中定义数组时,没有初值表,不被初始化,值为随机值。
函数外定义数组,没有初始化,数组元素值为0
定义数组,编译器必须知道数组的大小,为整个数组分配适当大小的内存,数组元素个数一定是常量表达式。

3.数组存取

存取数组元素

数组元素(数组名+下标标识)称为下标变量,它可以 像简单变量一样参与运算。

格式:数组名[下标表达式]; 

下标表达式可以使变量表达式,标识数组元素,不同于定义数组时确定数组长度的常量表达式。

数组的下标从0开始;

读取数组元素地址

4.数组的地址

数组内存中分配一块连续的存储空间,从第一个元素开始依次存放。数组在内存中的排列方式,如图

【C++】结构数据类型-数组

数组内存大小的计算公式为:n*sizeof(元素类型);或者sizeof(数组名); n为数组的长度;

数组元素的地址通过数组名来读取,数组名是一个地址常量,是数组在内存中的起始地址。

格式为:数组名+整形表达式。

地址不是实际的地址值,只表示了相对于起始地址的位置,称为符号地址表达式。如图上:a+5 表示数组中元素 a[5]的符号地址。

实际地址值的求法:数组的符号地址表达式a+n所表达的地址是第n+1个元素a[n]的地址。实际地址值 为:a+n*sizeof(数据类型)
5.数组复制

数组名是一个地址常量,不能作为被赋值对象。所以不能将一个数组整体复制给另外一个数组。

通过for循环对应的元素进行复制

for(i=0;i<5;i++)

a[i]=c[i] //将数组c中元素的值复制到数组c的对应元素中

使用Memcpy函数进行内存字节复制,格式为

Memcpy(目标地址,源地址,字节数);

例如:Memcpy(c,a,sizeof(a)); //将数组a 复制到c中。

二.二维数组

二维数组是在一维数组的基础上,增加了一维。我们通过一幅图,看看二维数组在内存中的排列顺序。

【C++】结构数据类型-数组

先顺序排列每个一维元素,构成一维数组;再将各个一维数组顺序排列,构成二维数组。

int M[2][3]为例

先将3个int元素排列组曾两个一维数组M[0],M[1]。

M[0]:M[0][0],M[0][1],M[0][2]

M[1]:M[1][0],M[1[1],M[1][2]

再将两个一维数组排列成一个二维数组

M:M[0],M[1]

总结:

数组是一种构造数据类型,表示同一类型数据的集合,在内存中连续的存放,数组名是一个地址常量,数组的起始地址。数组接触了很长时间了,一直感觉复杂,不容易理解,不愿意接触。在C++的学习中,感觉到终于从量变到了质变,对数组有了新的认识。编程语言的类似性,决定了每一种语言都有同样的知识,不同的时间,不同的角度,总会明白的。