C++ 数组小结~~
1. 数组 的定义和初始化:
数组由 类型名、标示符和维数组成的。数组的下标我们要特别的注意下:比如说
const int buf_size = 100, max_files = 20;
int staff_size = 10;
const int szBuf = get_size(); // szBuf的值在程序运行的时候才知道。
char cCH[buf_size]; //正确
char cCH[max_files + 1]; //正确
double dBuf[staff_size]; //错误
float fBuf[get_size()]; //错误 非常量表达式
int nBuf[szBuf]; //错误 szBuf 的值在运行时期才知晓。
2. 显示初始化数组
int a[] = {0,0,0,0}; //初始化列表
在函数体外定义的内置数组 其元素初始化为0;
在函数体内初始化的数组 其元素初始化。
FunA(){
int a[5];
cout<<a[1]<<endl; //ERROR
}
如果其元素类类型 则自动调用默认的构造函数进行初始化,若没有构造函数,则必须提供显示初始化
3 特殊的字符数组
char ca1[] = {'C','+','+'};
char ca2[] = {'C','+','+','\0'};
cahr ca3[] = {"C++"};
亲 想下三个数组额维数分别为多少呢。。
char ca4[5] = {“hello”};//error
4. 不允许数组直接复制和赋值。
5. 数组越界 编译器不会报错,但是有时候会出现意想不到的错误。
int a[3] = {0};
a[4] = 5;
for(int i =0; i < 4; i++)
{
printf("%d",a[i]);
}
6 动态数组的定义
int *p = new int [10]; //分配了10个int 元素的数组,并返回指向该数组的第一个元素的指针,初始化指针p;
动态分配数组时 如果是类类型 将使用该类的构造函数实现初始化,如果是内置类型,没有初始化。
但 这样可以进行初始化: int *p1 = new int[10]();//数组元素都设置为0;
const 对象的动态数组 必须实现初始化。
允许动态分配空数组。
动态空间的释放
用delete []表达式释放指针所指向的数组空间。
值得注意的是: 【】是不能够省略的,告诉编译器它指向的是自由存储区中的数组,并非单个对象。
浙公网安备 33010602011771号