C++学习第九天:初次接触C++数组

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;
				
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值