C/C++的精髓就在于,跟它一比,
什么灰机昏啊膏素也显得那么生动活泼…
正在被C++欺负吗?
那就快进来看看吧
本节纲要
0
1)一维数组
2)指针数组
3)数组指针
What is 数组?
数组的定义
在编程中,为了处理成批数据类型相同的数据,c语言提供了一个处理工具即数组,把具有相同类型的若干数据有序的组织起来。这些按序排列的同类数据元素的集合就是这种类型的数组。
数组在内存中占有一片连续的存储空间,因为数组里元素的类型一致,即不存在内存对齐问题(关于内存对齐下次再说吧),所以这个存储空间的大小自然就是元素的个数乘以数据类型对应的字节大小。
一维数组
说明格式:
类型 标识符(数组名)[数组长度表达式]
e.g. int array[3] 就是定义了一个数组名为array的有三个整型元素的数组
几点说明
1)这个类型可以是我们的基本数据类型(int,float,char,int*等),也可以是我们自定义的数据类型(结构体等)。
2)这个长度表达式必须为常量整型表达式(也可以是提前定义的用const约束的变量),不能是变量,浮点数等,即最终的结果必须是一个确定的整数!
初始化
int array[3] = {1,11,111};
//定义的时候就赋值
此时array[0]=1,array[1]=11,array[2]=111;
注意:数组第一个元素对应的下标是0。
再来了解一个概念:偏移量。偏移量可以理解为,数组中元素的地址和数组首地址的差。因为数组的首地址就是数组第一个元素的地址,所以第一个元素的偏移量为0,即数组下标是从0开始。但赋值的时候,常数的个数不能超过数组长度(编译会出错),如果常数个数比数组长度少,少的部分系统会自动补零!
e.g. int array[3] = {1,11,111,1111}; //错误
int array[3]={1} ;
等价于
array[0]=1,array[1]=0,array[2]=0;
另一种初始化方式
Int array[] = {1,11,111};
省略了长度,编译器会根据元素个数来补充长度的大小。
注意:这个补零对应整型元素就是补0,对应浮点型补0.0,对应字符型补‘\0’(即ASCII的NULL)
一维数组的访问
1. 通过下标来访问数组元素
2. 通过指针来访问
因为数组的存储空间是连续的,因此只需知道首地址,元素类型和数组长度就可以访问每一个元素
我们通过一段代码来说明:
在小编的编译器输出结果为:6684208 6684208 1 1 1 1 11 11 11 11 111 111 111 111 0 0 0 0
注意:既然p是一个指针变量,我们对它进行自增运算,
就有以下方式访问数组元素:
输出结果为 1 11 111
有关自增的知识我们将在下次推文详细的介绍。
指针数组
谈谈定义
当数组元素的类型为指针类型时,即这个数组是拿来放地址的,我们就把这个数组称为指针数组。因此这个数组是对一系列对象的地址的管理。
说明格式:类型 *标识符[长度]
还是看例子实在一点
当然这样定义int*array[array_1,&a,&b]也是可以的,但没有什么实际意义。
下面我们来输出指针数组指向的数组的元素:
指针数组与数组指针
我们已经知道指针数组是本质是一个数组,只不过其元素为指针类型;数组指针本质是一个指针,只不过其指针指向一个数组。
int (*p)[4];
表示一个整型指针,而这个指针只能指向一个有四个整型元素的数组。
int a[4]={0};//[]下标
p= &a;
今天先介绍到这里,有关数组更多的内容,我们下一课再聊