1. 语法
1.1. 用常量长度声明/定义数组:
元素类型 数组名[长度]
说明:
长度: 不能为变量
1.2. 用变量长度声明/定义数组
元素类型* 数组名=(元素类型)calloc(长度,sizeof(元素类型))
2. 字符串数组
2.1. 字符串结束符
当int ch[] = "600"时是将字符串的每个字符当成一个元素,同时将其他元素都赋值为空字符('\0')- 数组不完全初始化的时候其他元素都是默认初始化为数值0,注意不是’\0’,故想要让一个数组元素全部初始化为’\0’的方法是:memset(数组, ‘\0’, sizeof(数组));
3. 数组的内存表现形式
3.1. 数组的实质
- 定义数组本质就是把对应类型的变量地址全部连续保存起来,呈现组的形势
3.2. 数组与指针的关系
- 通常情况下数组名就是一个指向第一个元素的指针,
[]表示取偏移量- 详细解释(不懂再看)
- C语言标准规定,当数组名作为数组定义的标识符(也就是定义或声明数组时)、sizeof 或 & 的操作数时,它才表示整个数组本身,在其他的表达式中,数组名会被转换为指向第 0 个元素的指针(地址)。 单独使用数组名字
- 实例
- 以下表达是等价的:
int a = {1,2,3}, *p, i = 2; {p=a;p[i];}=={p=a;*(p+i);}=={p=a+i;*p;}=={p=a;3}//a[0]这样的表达就是把a作为指针,取中括号内的偏移量
- 以下表达是等价的:
- 详细解释(不懂再看)
4. 数组的用法
4.1. 不可以进行的用法
- 数组名不可以重新赋值其他地址
- 详解(不懂再看):
- 总的来说,一整个数组经常会等价于第一个元素的地址,但不能用地址(指针)给整个数组赋值,因为声明这个数组的时候就已经设定了这个数组的对应地址,后面就不能再改变
- 详解(不懂再看):
4.2. 可以进行的用法:
- 数组名可以作为函数的参数,这是实际上就是个指针(指向第一个元素)
- 数组名作为函数的形参时, 数组的长度是无法被传递的. 所以数组形参通常写成这样:
第一个参数获得数组, 第二个参数获得数组的长度void TEST(int a[], int size){//其中数组形参也可以写成int a[10],但这个长度是无意义的 //代码 }
- 数组名作为函数的形参时, 数组的长度是无法被传递的. 所以数组形参通常写成这样:
多维数组
child::C语言二维数组及多维数组详解