天天看点

【c++知识点】数组

【概念】

1、数组中的独立变量:索引变量,下标变量或元素

2、方括号中的数字:索引或下标

3、数组的索引变量数目:声明长度或数组长度

4、索引编号从0开始,结束于数组长度-1的整数

5、索引变量可以为任意类型,但同一数组的所有索引变量必然是同一类型(基类型)

6、方括号中的索引可以是整数常量,如int a[10];也可以是表达式(求值结果在0和数组长度-1之间),如int n=2;score[n+1]=10;

【声明】

声明数组时,数组长度可以使用已定义的常量

const int NUM=10;int score[NUM];//注意:数组长度不能使用变量!!部分编译器不兼容

【内存表示】

1、数组各索引变量的位置在内存中相邻;

2、计算机仅记住索引变量a[0]的地址,通过元素的基类型占用的内存空间来计算其他索引变量的地址。

3、常见错误是引用不存在的数组索引,导致内存溢出;

【初始化】

int num[3]={4,21,55};//提供的值少于数组长度,剩余索引变量默认初始化为数组基类型的零值(建议主动初始化)。

【遍历】

int arr[]={3,5,9,14};

for(int x:arr){

 cout<<x<<endl;

}

for(auto x:arr){

 cout<<x<<endl;

}

【函数参数】

1、索引变量作为函数参数时,用法和普通变量一样;

2、整个数组作为函数参数时,需在形参中指明数组长度(只有数组首个索引变量的地址和基类型被传递),此时数组实参自动退化为同类型指针。

int getSize(int data[],int size);//size为数组长度,data[5]内的索引数字会被编译器忽略

//以下为数组退化为指针演示

int getSize(int data[]){return sizeof(data);}

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

cout<<sizeof(data)<<endl;//输出20

cout<<getSize(data)<<endl;//输出8,64位系统下指针长度为8字节

注意:

1、实际调用函数时,提供的实参data不添加[]或索引表达式,如getSize(data,5);

2、数组形参为传引用参数的弱型,作用于数组形参的任何操作都会作用于数组实参

3、常量数组参数用const修饰(通常只修饰数组形参和类形参),数组任何值都不能被修改int getSize(const int data[],int size);

【常用算法】

1、顺序搜索

2、选择排序

3、冒泡排序(较大值如同气泡上浮,连续向数组末尾移动)

【二维数组】

二维数组可以转换为对应的二维显示,第一个索引代表行,第二个索引代表列。

int getSize(int data[][3],int size);

注意:

1、二维数组作为参数传递时,不指定第1维长度(索引数组被编译器忽略),size用于标识第1维长度

2、第1维(甚至更多维)是用于描述基类型,而基类型长度必须被指出!

【动态数组要点】

1、写代码时不指定数组长度,在运行时确定长度

2、数组变量本质是指针变量,指向数组的第一个索引变量

3、数组标识符a可视为指针变量,且指针值不可修改!!

int a[5];int *p=addr;a=p;//非法!!

【动态数组声明&销毁】

int *p=new int[3];//通过new操作符创建

1、动态数组指针的指针类型和数组元素的指针类型是相同的

2、动态数组长度在[]中指出,如果缺失则由系统分配足够大的存储空间

3、delete []p;//销毁动态数组所在的堆内存空间