二维数组的创建,什么是二维数组
类如:1 2 3 4
5 6 7 8
9 10 11 12
int arr[3][4]就可以写出这个三行四列
二维数组的初始化
int arr[3][4]={{1,2},{3,4},{5,6}} (可以进行分组)
[0] {1,2,0,0}
[1] {3,4,0,0}
[2] {5,6,0,0}
这就是不完全初始化,后面程序会自己补0。
int arr[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}
[0] {1,2,3,4}
[1] {5,6,7,8}
[2] {9,10,11,12}
这就是完全初始化
二维数组int arr[][]可以省略行但不能省略列
int arr[][4]={{1,2,3,4},{5,6}}
{1,2,3,4}
{5,6,0,0}
可以把二维数组理解为:一维数组的数组。
二维数组在内存中的储存
二维数组在内存中也是连续存放的
1 2 3 4 5 6 7 8 9 10 11 12
arr[0] arr[1] arr[2]
数组越界
数组的下标是有范围限制的。
数组的下规定是从0开始的,如果数组有n个元素,最后一个元素的下标就是n-1。
所以数组的下标如果小于0或者大于n-1,就是数组越界访问了,超出了数组合法空间的访问。
(若访问小于0或者大于n-1的值,那些值是随机的)
c语言本身是不做数组下标的越界检查,编译器也不一定报错,但是编译器不报错并不意味着程序就是正确的。(要自己做越界检查)