1、数组的概念
数组是一组相同类型元素的集合 数组分为一维数组和多维数组,常见的多维数组是二维数组
***数组中存放的几个数据 其数据类型是相同的
***数组元素个数为一个或多个 不能为0
2、数组类型
数组中存放数据的类型,常见的有char、int、short、float等和自定义类型
如:int arr[9]为整型数组 char arr[20]为字符数组
3、一维数组的创建和初始化
(1)一维数组的格式:type arr_name[常量值];
其中type为数组类型,即上文介绍的int char 等。 arr_name为数组名 []中的常量值用来指定数组大小,根据实际需求决定。
***数组在创建的时候可以指定数组的元素类型和数组大小
如创建一个整型数组来存放10个人的成绩 int arr[10]
(2)初始化:在创建数组时给一些初始值 如上例:int arr[10]={95,84,62,76,83,52,98,66,89,74}
初始化包括完全初始化和不完全初始化
完全初始化即数组容量有多少,则初始值给多少
不完全初始化 如int arr[5]={2,3} 则第一个元素为2,第二个元素为3,余下没有给初值的元素默认为0
***当所给元素数量大于数组容量时 即错误初始化
学习了数组的创建,那么接下来就要学如何使用数组
4、一维数组的使用
(1)下标 数组下标时从0开始的
如 int arr[10]={1,2,3,4,5,6,7,8,9,10}
0 1 2 3 4 5 6 7 8 9//元素1对应的下标即为0以此类推
下标操作引用符[] 想要访问下标为7的元素就arr[7]得到即为数字8 如图
(2)打印数组内容
如果想要访问一个数组中的全部内容,只要for循环遍历后打印每个元素就行了
(3)输入
现在我们已经了解了数组内容的输出 那么可以自己输入数组的内容吗
当然可以! 同样的scanf函数 例子如下:
在这里scanf的用法与前面基本相同,只不过为了输入数组的全部内容需要使用循环多次输入
(4)存储
***一维数组在内存中是连续存放的
一个整型为四个字节 从图中打印每个元素的地址我们发现十六进制下每个元素之间相差4 从而得出一维数组在内存中是连续存放的
补充:若要计算数组大小 使用到一个关键字——sizeof 计算结果为所占内存空间大小 单位为字节
那么通过sizeof我们又有了一种计算元素个数的方法———数组所占内存大小/任意一个元素所占内存大小 如:int num = sizeof(arr)/sizeof(arr[0]); 那么num即为数组元素个数
***字符数组中sizeof和strlen的区别
我们任给两个字符数组
如 char arr1[]={"abcdegf"};
char arr2[]={'a','b','c','d','e','f','g'};
对于sizeof 其求的是数组大小 而arr1中字符串的结束标志为“\0” 因此算上\0其有效元素个数为8,而1个字符占1个字节 故结果为8 而arr2为单纯的七个字符 结果为7
我们再来看strlen的结果
strlen求的是字符串长度 遇见\0停止 而arr0没有\0 结果是个随机数
注意区别!!!
5、二维数组的创建以及初始化
![](https://i-blog.csdnimg.cn/direct/9d258e123da84d49998211784df59f00.png)
![](https://i-blog.csdnimg.cn/direct/ab6ac6bbc58546c9af02f5a2f8eca82b.png)
通过上面我们发现数组在创建时只能使用常量或常量表达式来指定数组大小 这种语法很不方便
![](https://i-blog.csdnimg.cn/direct/ac2f4d6420d6490b8781a0d6ab0fdbd0.png)
![](https://i-blog.csdnimg.cn/direct/d52e671a6f8d471c9f01132a1bbfc531.png)
![](https://i-blog.csdnimg.cn/direct/7e201fd7774849d39e1ce0ab0b4da828.png)