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

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

一.一维数组

1.数组定义


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

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

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

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

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

2.数组初始化

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

3.数组存取

存取数组元素

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

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

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

        数组的下标从0开始;

读取数组元素地址

4.数组的地址

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


        数组内存大小的计算公式为: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中。

二.二维数组

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


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

        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++的学习中,感觉到终于从量变到了质变,对数组有了新的认识。编程语言的类似性,决定了每一种语言都有同样的知识,不同的时间,不同的角度,总会明白的。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 24
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值