C++数组

C++数组

 

声明:

一维数组: <数据类型>  <数组名> [常量表达式],常量表达式表示数组每一维所包含元素的个数。

二维数组: <数据类型>  <数组名> [常量表达式][常量表达式]

 

访问:

<数组名> [下标表达式]

<数组名> [下标表达式][下标表达式]

下表从0开始

比如 int intArr[30],就从intArr[0]intArr[29],编译器为这个数组分配了一块连续的存储空间,数组名实际上是这块存储空间的起始位置,指向首个元素的指针。

PS:为了保证编译效率,C++编译器不对数组下标进行越界检查,所以使用不当可能会出现run-time crash,因为对超过数组存储空间的访问是undefined的。

 

初始化:

double dArr[3]={90.0, 75.0, 85.0};

 

int a[2][3] = {2,4,6,8,10,12}; // a[i]的每个元素是一个int类型的3元数组)前3个对a[0]3个元素赋值,后三个对a[1]3个元素赋值。

const int size = 3;

int a[2][size ] = { {2,4,6 } , { 8,10,12} };// 第一个{}内对a[0]赋值...

 

声明时不初始化,数组元素的值是随机的(PS:这与变量初始化的规则一致)。初始化表达式里面优先对前面的元素赋值,后面元素的初始值为0

 

int a[2][3] = {2,4,6} // a[0][0] = 2, a[0][1] = 4, a[0][2] = 6, a[1][0] = 0, a[1][1] = 0,a[1][2] = 0

如果初始化表达式提供所有元素的初始值,数组第一维的长度可以省略。

double dArr[ ]={90.0, 75.0, 85.0};

int a[ ][3] = { {2,4,6 } , { 8,10,12} };

 

数组的特点:C++里的数组不如vector

1. 不能像普通变量那样整体拷贝或者赋值;

2. 不能整体作为参数传入函数,要么只能退化为指针,要么使用引用。

3. 不能作为函数返回类型(不是class类型,编译器不知其大小);

 

数组的数据类型可以是内置类型也可以是构造类型等,如果没有提供初始化函数,则数组元素的初始化与变量初始化的规则相同:

1. built-in typedefined outside the body of function(不是栈内)are initialized to zero

2. built-in type:  defined inside the body of functionundefined/ uninitialized

3. class type 无论在函数内还是函数外,元素由类的默认构造函数(如果有的话)初始化,如果无,元素必须只能被显式初始化。

 

因此除非我们显式地提供初始化函数,否则局部数组的元素(内置类型)都不会初始化,使用它们可能会导致未定义错误(除了赋值操作)。

 

字符数组

字符数组比较特别,可以使用{}方式初始化也可以使用字符串字面量(character string literal)来初始化

 

char ca1[] = {‘c’, ‘+’, ‘+’ }; // null character

char ca2[] = {‘c’, ‘+’, ‘+’ , ‘\0’ }; // 显式加null character

char ca3[] = “c++”; // 字符串字面量以null character结束,ca3自动加null

因此,char name[6] = “123456”; 是错误的,因为加上null character7个字符

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值