C语言初阶学习笔记3.0
数组
数组是一组相同类型元素的集合
数组的创建方式

在C99标准之前,数组的大小必须是常量或者常量表达式
在C99之后,数组的大小可以是变量,为了支持变长数组。
但是变长数组是不能被初始化的
数组的初始化
数组的初始化是指,在创建数组的同时给数组的内容一些合理初始值(初始化)。

完全初始化如下:
下面对两个代码进行分析:
1、
这个代码定义了一个char类型的数组,使用大括号括起来的,自己存放了a, b, c三个字符,所以a, b, c之后的字符全部被初始化为零
2、

这个代码也是定义了一个char类型的数组,但是是使用双引号的,它里面存放的就是a, b, c, 之后的字符便被初始化为零
也可以不指定数组大小


一维数组的使用
[ ],下标引用操作符,它其实就是数组访问的操作符
一维数组在内存中是连续存放的
二维数组
二维数组的创建

二维数组的初始化
二维数组如果有初始化,行可以省略,但是列不可以省略
二维数组的使用也是通过下标的方式

可以把二维数组理解为:一维数组的数组
二维数组在内存中也是连续存放的

例如:
arr[12];
arr[3][4];
这两个数组在内存中的布局是一样的
数组越界
数组的下标是有范围限制的。
数组的下规定是从0开始的,如果数组有n个元素,最后一个元素的下标就是n-1。
所以数组的下标如果小于0,或者大于n-1,就是数组越界访问了,超出了数组合法空间的访问。
C语言本身是不做数组下标的越界检查,编译器也不一定报错,但是编译器不报错,并不意味着程序就是正确的,所以一定要做好检查!!!

二维数组也可能存在越界
数组作为函数参数
数组在传参的时候,只需要给一个数组名就可以了
数组传参的时候,形参有两种写法:
1.数组 int arr[ ] (容易理解)
2.指针 int *arr
数组名确实表示首元素的地址,但是有两个例外:
1.sizeof(数组名),这里的数组表示的是整个数组,计算的是整个数组的大小,单位是字节
2.&数组名,这里的数组名表示整个数组,取出的是整个数组的地址。
二维数组的数组名怎么理解呢?
二维数组的数组名也表示首元素的地址
示例:
输入如下:

&取二维数组的地址,取的是整个数组的地址
数组是有类型的例如:
int arr[10] = {0};
它的类型就是int [10]
sizeof是一个操作符
是用来计算变量(类型)所占内存空间的大小,不关注内存中存放的具体内容
单位是字节
strlen
strlen是一个库函数,是专门求字符串长度的,只能针对字符串
从参数给定的地址向后一直找 ,统计 之前出现的字符的个数









