C++学习第九天:初次接触C++数组
/*
数组:数组定义中的类型名可以是内置数据类型或类类型,数组元素的类型还可以是任意的复合类型。
没有所有元素都是引用的数组。(这句话怎么理解?是这样吗:C++中不存在一个数组,这个数组的所有元素都是引用)
数组定义和初始化:
数组的维数必须用值大于1的常量表达式定义。此常量表达式只能包含整型字面常量、枚举常量或者用常量表达式初始化的整型const对象。
非const变量以及要到运行阶段才知道其值的const变量都不能用于定义数组的维数。例如:
const unsigned buf_size=512;
int staff_size=27;
const unsigned sz=get_size(); //get_size()是返回一个整型的函数
char input_buffer[buf_size];
int fileTable[buf_size+1];
//使用非const变量定义数组维数,将报错
double sale[staff_size];
//不是const变量,所以不能用于定义数组维数,下面将报错
int tests[get_size()];
//在运行时才能知道其值的const变量,所以不能用于定义数组维数,下面将报错
int vals[sz];
显示初始化数组元素(和java没多大区别,也支持显示初始化,例如:int ia[]={1,2,3};):
1.在函数体外定义的内置数组,则其元素均初始化为0;
2.在函数体内定义的内置数组,其元素无初始化;
3.不管数组在哪里定义,如果其元素为类类型,则自动调用该类的默认构造函数进行初始化,如果该类没有默认构造函数,则必须为元素提供显示初始化。
注意:除非显示地提供元素初值,否则内置类型的局部数组的元素没有初始化,此时除了给元素赋值外,其他使用这些元素的操作没有定义。
字符数组:字符数数组初始化跟普通初始化一样,初始之外,开可以使用字符串字面值+一个额外的空字符(null用于结束字符串)初始化字符数组。例如:
char ca[]="C++";//这个的数组维数是4
//下面将报错
char ca[3]="C++";
不允许数组直接赋值和赋值:一个数组不能用另外一个数组初始化,也不能将一个数组赋值给另一个数组(这里与Java不同,Java可以通过一个数组给另外一个数组直接赋值例如:int[] array1={1,2},array2;array2=array1)
例如:
int ia[]={1};
//使用另外一个数组初始化一个数组,将报错
int ia2[](ia);
int ia3[];
//一个数组引用另外一个数组,报错
ia3=ia;
访问数组元素:使用下标操作符来访问数组元素。
访问数组元素是,数组下标使用的是size_t类型:例如
int wa[]={1,2};
int wa2[2];
for(size_t i=0;i!=2;++i){
wa2[i]=wa[i];
}
注意:在使用数组时,必须保证其下标值在正确的范围之内,及数组在该下标位置应对应一个元素。
*/
#include<vector>
using std::vector;
int get_size(){
return 2;
}
int main(){
const unsigned buf_size=512;
int staff_size=27;
const unsigned sz=get_size(); //get_size()是返回一个整型的函数
char input_buffer[buf_size];
int fileTable[buf_size+1];
//使用非const变量定义数组维数,将报错
// double sale[staff_size];
//不是const变量,所以不能用于定义数组维数,下面将报错
//int tests[get_size()];
//在运行时才能知道其值的const变量,所以不能用于定义数组维数,下面将报错
//int vals[sz];
//显示初始化数组
int ia[]={1,2,3};
char ca[]="C++";//这个的数组维数是4
//下面将报错
// char ca2[3]="C++"; //"C++"字符串初始化字符数组时,C++占用3个字符,在加上一个空字符,共需要4个字符的大小,所以会报数组溢出错误
int iai[]={1};
//使用另外一个数组初始化一个数组,将报错
// int iai2[](iai);
int iai3[10];
//一个数组引用另外一个数组,报错
// iai3=iai;
//课后作业
unsigned bize=1024;
// int sa[bize];//非const变量,不能通过编译,定义数组维数必须是用字面值初始化的const变量或者是字面值
int sa1[4*7-14]; //字面值常量,通过编译
int da[7]={0,1,1,2,3,5,8};
//下面初始化失败,编译报错,vector不穿在这样的初始化方法
// vector<int> ivec={0,1,1,2,3,5,8};
//数组赋值,编译报错
// int da2[]=da;
//不同类型的赋值操作,编译报错
// vector<int> ivec;
// int da3[]=ivec;
//访问数组元素,数组下标类型是size_t
int wa[]={1,2};
int wa2[2];
for(size_t i=0;i!=2;++i){
wa2[i]=wa[i];
}
return 0;
}