二维数组的创建和初始化
一、二维数组的创建
//数组创建 int arr[3][4]; char arr[3][5]; double arr[2][4];
#include<stdio.h> //二维数组的创建 //1 2 3 4 //2 3 4 5 //3 4 5 6 //存放以上数组 int main() { int arr1[3][4];//3行4列 char arr2[5][10]; return 0; }
二、二维数组的初始化
完全初始化:
不完全初始化:
二维数组如果有初始化,行可以省略,列不能省略。
(三维数组只能省略第一维,后面两维不能省略)
三、二维数组的使用
通过下标访问元素:
四、二维数组的理解
五、二维数组在内存中的存储
通过结果我们可以分析到,其实二维数组在内存中也是连续存储的。
六、数组越界
数组的下标是有范围限制的。
数组的下规定是从0开始的,如果数组有n个元素,最后一个元素的下标就是n-1。 所以数组的下标如果小于0,或者大于n-1,就是数组越界访问了,超出了数组合法空间的访问。
C语言本身是不做数组下标的越界检查,编译器也不一定报错,但是编译器不报错,并不意味着程序就 是正确的, 所以程序员写代码时,最好自己做越界的检查。
错误示范:二维数组的行和列也可能存在越界。
七、数组作为函数参数
往往我们在写代码的时候,会将数组作为参数传个函数,比如:我要实现一个冒泡排序(这里要讲算法 思想)函数。
#include<stdio.h> //冒泡排序 //数组传参的时候,形参有两种写法: //1.数组 //2.指针 void bubble_sort(int arr[],int sz)//形参是数组的形式 //void bubble_sort(int *px,int sz)//形参是指针的形式 { //1.确定趟数 int i = 0; for (i = 0; i < sz - 1; i++) { //一趟冒泡排序 int j = 0; for (j = 0; j < sz-1-i; j++) { if (arr[j] > arr[j + 1]) { //交换 int tmp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = tmp; } } } } int main() { //数组 //把数组的数据排成升序 int arr[] = { 9,8,7,6,5,4,3,2,1,0 }; //0 1 2 3 4 5 6 7 8 9/ int sz = sizeof(arr) / sizeof(arr[0]);//算出的是arr中的元素个数 //冒泡排序的算法,对数组进行排序 bubble_sort(arr,sz);//数组传参的时候,直接给数组名就可以了 int i = 0; for (i = 0; i < sz; i++) { printf("%d ", arr[i]); } return 0; }