【C++】结构数据类型-数组
数组是一组在内存中一次连续存取的,具有同一类型的数据变量所组成的集合体,它在内存中占用一段连续的空间。其中的每个变量成为数组元素,属于同一数据类型,数组元素用数组名与带方括号的数组下标一起标识。谈数组,我们从四个方面谈起。数组的定义,初始化,存取,数组地址的求得。而数组可以是一维数组,二维数组和多维数组,我们从最基本的一维数组说起,其他维数组通过一维数组可以推得。
一.一维数组
1.数组定义
数据类型相同的简单变量和数组可以一起定义。 例如:Int x,a[20]
定义数组时,还可以用类型定义typedef为数组类型取一个名字,格式为:
typedef 数据类型 数组名[常量表达式];
typedef int A[5]; //A是一个类型名,数组类型;
A b[5]; //b是数组对象;
2.数组初始化
在函数中定义数组时,没有初值表,不被初始化,值为随机值。
在函数外定义数组,没有初始化,数组元素值为0
定义数组,编译器必须知道数组的大小,为整个数组分配适当大小的内存,数组元素个数一定是常量表达式。
3.数组存取
存取数组元素
数组元素(数组名+下标标识)称为下标变量,它可以 像简单变量一样参与运算。
格式:数组名[下标表达式];
下标表达式可以使变量表达式,标识数组元素,不同于定义数组时确定数组长度的常量表达式。
数组的下标从0开始;
读取数组元素地址
4.数组的地址
数组内存中分配一块连续的存储空间,从第一个元素开始依次存放。数组在内存中的排列方式,如图
数组元素的地址通过数组名来读取,数组名是一个地址常量,是数组在内存中的起始地址。
格式为:数组名+整形表达式。
地址不是实际的地址值,只表示了相对于起始地址的位置,称为符号地址表达式。如图上: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中。
二.二维数组
二维数组是在一维数组的基础上,增加了一维。我们通过一幅图,看看二维数组在内存中的排列顺序。
先顺序排列每个一维元素,构成一维数组;再将各个一维数组顺序排列,构成二维数组。
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++的学习中,感觉到终于从量变到了质变,对数组有了新的认识。编程语言的类似性,决定了每一种语言都有同样的知识,不同的时间,不同的角度,总会明白的。