一、二维数组的创建
//数组创建
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;
}