C语言 第十三章 数组与批量数据存储

本文探讨了C语言中的数组概念,包括一维和二维数组的定义。一维数组通过类型 数组名[元素个数]的形式定义,而二维数组则采用类型 数组名[行数][列数]的方式,如int a[2][3],用于存储6个整数元素。

//地址
1,计算机中的内存是以字节为单位的存储空间,
内存的每一个字节都有一个唯一的编号,称为地址。

	凡是存放在内存中的程序和数据都有一个地址,
	也就是说,一个函数也有自己的内存地址。
 
2,当定义一个变量时,系统就分配一个带有唯一地址的存储单元来存储这个变量。
	
	char a = 'A';//A的ASCII值为65
	
	int b = 66;  
	
	变量存储单元的第一个字节的地址就是该变量的地址。
	内存中存储的都是二进制数据。 

3,调试过程中,我们采用打印的方式查看变量的地址;
	
	int c = 10;
	
	printf("16进制:%x\n",&c);
	
	printf("10进制:%d",&c);

//一,一维数组
1,定义
形式:类型 数组名[元素个数]

	int a[5];
	[]里面的个必须是一个固定值,可以是常量,常量表达式。
	绝对不能使用变量,或者变量表达式来表示元素个数
	大多情况下不要省略元素个数,
	/当数组作为函数的形参和数组初始化时除外。

2,一维数组的存储
	定义数组时系统将按照数组类型和个数分配一段连续的存储空间来存储数组元素。
	
	数组名代表着整个数组的地址,也就是数组的起始地址。
	
	a==&a[0]
	即第一个元素的地址就是整个数组的地址

3,一维数组的初始化
	初始化的一般形式:类型 数组名[元素个数]={元素1,元素2,...};
	
	int a[2] = {8,10}; 
	
	相当于
	int a[2];
	a[0] = 8;
	a[1] = 10;
	
	/C语言中编译器是不会对数组下标越界进行检查的,
		所以自己访问数组时要小心
		
	元素值列表可以是数组元素的初值,也可以是前面部分元素的初值
		int a[4] = {2,5};
		当数组为整数时,初始化未确定的元素,默认为0,
	
	当对全部数组元素都赋初值时,可以省略元素个数
	int a[] = {2,5,7};//说明数组a的元素个数是三
	
	数组初始化时的赋值方式只能用于数组的定义,
	定义之后只能一个元素一个元素地赋值。 
	
4,一维数组与函数参数
	一维数组的元素作为函数实参,与同类型的简单变量作为实参一样,
	是单向的值传递。
	即 数组元素的值传给形参,形参的改变不影响实参
	
	voide test(int b)//b是test函数的形参 
	{
		b = 9;
	 } 
	 
	 int main()
	 {
	 	int a[3];
	 	a[0] = 10;
	 	
	 	printf("函数调用前的a[0]:%d\n",a[0]);
	 	
	 	test(a[0]);//a[0]是test函数的实参 
	 	
	 	printf("函数调用后a[0]:%d",a[0]);
	 	return 0;
	 	
	 }
	
	数组名代表着整个数组的地址,
	如果一维数组的数组名作为函数实参,传递的是整个数组,
	即 形参数组和实参数组完全相同,是存放在同一存储空间同一数组。
	这样形参数组修改时,实参数组也同时被修改了。
	形参数组的元素可以省略。
	
	void test(int b[])//b是test函数的形参 
	{
		b[0]= 9;//也可已写成 int b[3] 
	 } 
	 
	 int main()
	 {
	 	int a[3];
	 	a[0] = 10;
	 	
	 	printf("函数调用前的a[0]:%d\n",a[0]);
	 	test(a);//a是test函数的实参 
	 	printf("函数调用后的a[0]:%d",a[0]);
	 	return 0;
	
	 }

//二维数组
1, 定义
定义形式: 类型 数组名[行数][列数]
int a[2][3];//共2行三列,6个元素

2,二维数组的存储
	C语言将二维数组当作是一维数组的集合,
	即二维数组是一个特殊的一维数组;他的元素是一维数组。
	eg;int a[2][3]可以看作是由一维数组a[0]和一维数组a[1]组成。
	
	二维数组的存放顺序是按行存放的,
	先存放第一行的元素,再存放第二行的元素。
	
	数组a[0]的地址和元素a[0][0]的地址相同,
	即 a[0] = &a[0][0] 
	
	结论
	a=a[0]=&a[0][0]
	类推
	a[1]=&a[1][0]
	
3.二维数组的初始化
 
 .按行进行初始化
 int a[2][3] = {{2,2,3},{3,3,4}};
 
 .按存储顺序进行初始化(先存放第一行,再存放第二行)
 int a[2][3] = {2,2,3,3,4,5};
 
 .对部分元素进行初始化
 int a[2][3] = {{2},{3,4}};
 int b[3][3] = {{},{ , ,2},{1,2,3}};
 
 如果只初始化了部分元素,可以省略行数,但是不可以省略列数
 int a[][3] = {1,2,3,4,5,6};
 int a[][3] = {{1,2,3},{3,5},{}}; 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值