第三章 数组类型

前面的学习进度太慢了,应该加快学习进度,否则这个月无法完成相应的学习了。

1.数组是单一数据类型对象的集合。我们通过索引访问(indexing)或者说下标访问(subscripting)来访问这个单一对象。

2.维数值必须是常量表达式——也就是说,必须在编译时刻能计算出它的值。这意味着非const变量不能被用来指定数组的维数。如

extern int get_size();//这是一个函数,获取size的函数

const int buf_size=512,max_files=20;//两个const变量

int staff_size=27;//一个非const变量


下面是定义数组:

char input_buffer[buf_size];//定义了一个字符数组。

char *fileTable[max_files-3];//OK,定义了一个C—style类型的数组

int test_scores[get_size()];//错误,非const表达式。

double salaries[staff_size];//这句是错的,因为staff_size不是常量,虽然它被初始化为一个常量,但staff——size本身是一个非const对象,系统只有在运行的时候才能获知它的值。


3.数组可以被显式地用一组数来初始化,这组数用逗号隔开,放在大括号里。

   const int array_size=3; int ia[array_size]={0,1,2};

其实,被显式的初始化的数组是不需要指定维数的值的。编译器会根据列出来的元素的个数来确定数组的维数:

如:int  ia[]={0,1,2};//编译器知道它是一个维数为3的数组。


4.如果指定了数组的维数,那么初始化的时候不能超过这个维数,否则将导致编译错误。反之,若指定的维数大于初始化时给出的元素个数,那么没有被显式初始化的元素将被置为0.

如: const int array_size=5;int ia[array_size]={0,1}那么,其实ia的元素为{0,1,0,0,0]


5.关于字符数组,需要主要下面这个问题。他可以用两种方法初始化,大括号加引号逗号,或者一个字符串加双引号来初始化。但是这两种方式是存在差异的。差异在于他们的维数

const char cal[]={‘C','+','+'};

const char ca2[]="C++";

前者的维数是3,后者的维数是4。后者类似于c-style字符串。

所以下面的声明是错误的:const char cha3[6]="Daniel";//应该是7维的。


5.还有需要注意的是,一个数组不能被另外一个数组初始化,也不能被赋值给另外一个数组。而且,C++不允许声明一个引用数组(即由引用组成的数组)

如下:

const int array_size=3;

int ix,jx,kx;

//OK:类型为int*的指针数组,也就是说这是个数组,数组的元素时指针(地址)

int *iap[]={&ix,&jx,&kx};

//错误,不允许出现引用数组

int &iar[]={ix,jx,kx};

//错误,不允许用另一个数组来初始化数组

int ia2[]=ia;//错误


6.还有个需要注意的是,char *ch[]={"abc","def","fgh"},这叫做C—style字符串数组,它的元素时字符串,而字符串相当于字符数组,所以它相当于数组的数组(二维数组)。数组的名字为首地址ch相当于&ch[0];


7.多维数组,定义:int ia[4][3];

                   初始化:int ia[4][3]={{0,1,2},{3,4,5},{6,7,8},{9,10,11}};

                   或者,int ia[4][3]={0,1,2,3,4,5,6,7,8,9,10,11};

若 int ia[4][3]={0,3,6,9}//表示只初始化了第一行的3个元素和第二行的第一个元素,其余的元素都被初始化为0

若int ia[4][3]={{0},{3},{6},{9}};则表示初始化了每行的第一个元素,其余的元素被初始化为0.


8.再来讲讲数组与指针类型的关系。

如 int ia[]={0,1,1,2,3,5,8,13,21};

则:ia(数组名)意味着第一个元素的地址,它的类型是数组元素类型的指针。本例中是int*。所以:ia和&ia[0]是等价的。

类似的*ia和ia[0];也是等价的。&ia[1]跟ia+1等价。*(ia+1)跟ia[1]等价。


9.注意,还有字符串类型的数组,string ia[]={"abc","edf","gfd"};这其实和char *ia[]={"abc","edf","gfd"}是类似的。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值