一维数组
-
一维数组的创建
数组是一组相同类型元素的集合
int arr[10];
char ch[20];
注意:在c99标准之前,数组的大小必须是常量或者常量表达式。在c99之后,数组的大小可以为变量,为了支持变长数组。用变量的数组不能初始化。
-
一维数组的初始化
数组的初始化是指在创建数组的同时给数组一些合理的初始值。
int arr[10] = {0};//默认全部元素为0
int arr1[10] = {1,2,3};//不完全初始化,前三个元素被初始化为1,2,3。剩余元素默认初始化为0
数组操作符:[],为下标引用操作符 。
随着数组下标的增长,元素的地址,有规律的递增,由此可以得出结论:数组在内存中是连续存放的。
二维数组
-
二维数组的创建
int arr[3][[4];
上面的意思该数组存放了三行数据,每行数据又有四个,也就是三行四列。
注意:二维数组在创建时,行可以省略,但列不可以。
-
二维数组的初始化
int arr[3][4] = {1,2,3,4,5,6,7,8,2,3,4,1};//这样会依次读取四个数放在一行,若最后不够四个则会自动补0; int arr[3][4] = {{1,2},{3,4},{5,6}};//这样子系统会将括号里的数放在一行,不够补0
数组综合知识点
-
数组越界
数组的下标是有限制范围的,数组的下标是规定从0开始的,如果数组有n个元素,那么最后一个元素的下标就是n-1;所以数组下标如果小于0或者大于n-1,就是数组越界访问了(C语言本身不检查)
-
数组传参
数组在传参的时候,有两种写法:数组,指针
Attention:
一维数组:当数组在传参时,传递的只是数组首元素的地址,所以形参应该是指针变量(虽然有两种写法),在函数内求数组的元素个数是不可取的。
一维数组的数组名确实能表示首元素的地址,但是有两个例外:
1.sizeof(数组名),这里表示整个数组,计算的是整个数组的大小。
2.&数组名,这里数组名也是表示整个数组,取出的是整个数组的地址。
打印小技巧:% num d(右对齐),% -num d(左对齐)。
二维数组的数组名的理解:
二维数组的数组名也表示首元素的地址,但是是第一行的地址(与一行一列的第一个元素地址相同,但表达的意义不同),将其看成一维数组,第一行就是其首元素。
-
sizeof 与strlen
sizeof():是一个操作符,用来计算变量(类型)所占内存空间的大小,不关注内存中存放的具体内容,单位是字节,计算返回结果为size_t的类型(无符号整型)。
strlen():是一个库函数,是专门求字符串长度的,只能针对字符串,从参数给定的地址向后找\0,统计\0之前出现的字符的个数。