四时宝库

程序员的知识宝库

C++学习目标:最简单实用的数组类型介绍(附图说明)

相对于简单数据类型而言,数组(Array)是一系列相同数据类型对象的集合。这个集合共享同一个变量名,其中单个对象(也称数组的元素)需使用数组下标访问。

(1) 语法定义

数组定义由类型名标识符和维数组成,如:

int nArray[5] = {0};

以上代码定义了一个int类型数组,其数组变量名为nArray。“[5]”表达该数组有5个元素,一个中括号代表它是一维数组,其元素的访问下标为0~4。“{0}”是C语言的数组直接初始化方法,表达该数组所有元素均被初始化为0

除了直接初始化外,数组是不可能直接用运算符“=”赋值的,但可以给数组指定元素用运算符“=”赋值。如:

nArray[2] = 123;

注意:数组元素的下标必然是从0开始。所以以上代码实际是给数组nArray的第3个元素赋值为123

(2) 多维数组

数组可以是多维数组,每一维用一个方括号对来指定。如:

int nArray2[2][3];

以上代码定义了一个int类型二维数组,第一维数量为2,第二维数量为3。可以理解为该数组有两个一维数组组成,每个一维数组均包含3个元素。

多维数组使用直接初始化方法时,可以按维数初始化,如

int nArray2[2][3] = {{1,2,3},{4,5,6}};

也可以像一维数组,按元素存放顺序初始化,如:

int nArray2[2][3] = {1,2,3,4,5,6};

二维数组元素的访问下标需要标明每一维的具体下标位置,如nArray2[0][2]代表以上数组的第3个元素。

(3) 数组内存

数组的内存占用是连续的。一个数组占用的内存大小,是其所有数组元素占用内存的总大小。如以下一维数组:

int nArray[5] = {1,2,3,4,5};

在VS2010调试器里内存窗口查看(在调试运行时,可点击“调试”-->“窗口”-->"内存"-->"内存1"弹出,在其地址栏拷贝nArray再按回车键)如下:

从以上图片可看出该数组内存共占20字节,即sizeof(nArray)=20。注意:int类型占4个字节,Windows下内存按小端(低字节存放于低地址)排列,所以整型1的内存是01 00 00 00。

再如以下二维数组:

int nArray2[2][3] = {{1,2,3},{4,5,6}};

在VS2010调试器里内存窗口查看如下:

(4) 实用说明

  • 如数组需初始化为非0值,可以用内存操作函数memsetfor循环遍历赋值进行。
  • 数组的访问下标绝对不能大于等于维数,如对5个元素的一维数组nArray,nArray[5]会导致访问越界,程序异常崩溃。
  • C语言风格的字符串实质也是一个数组(一维char类型数组,有效元素存放可显示字符,以0结尾),所有它有所有的数组特性。
  • C++的数组类型不常用,一般尽量使用STL容器代替,如vector
  • 使用数组需计算连续内存开销,如占用过大,需改为用占用不连续内存的STL容器代替,如list
  • 尽量不要使用多维数组,连续内存开销过大,且代码难于阅读。可使用STL容器的嵌套来实现。
  • 在STL的库文件“algorithm”里,提供了一些查找、排序、删除、交换等算法,可直接用于数组操作。这些算法既可应用于各种类型的数组,也可应用于容器,故称泛型算法。

最后,让我们在VS2010库文件(如“winctrl2.cpp”)里找找数组的身影:

学习目标“最简单实用的数组类型介绍”已完成[再见]

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接