目录
1.一维数组的创建和初始化
1.1数组的创建
数组是一组相同类型元素的集合。
int arr[10];
int arr[10+5];
在C99标准之前,数组的大小必须是常量或者常量表达式
在C99之后,数组的大小可以是变量,为了支持变长数组
1.2数组的初始化
数组的初始化是指,在创建数组的同时给数组的内容一些合理初始值(初始化)。
![](https://i-blog.csdnimg.cn/blog_migrate/d65a8b2649dc7c6bfbd1ea3213a677a4.png)
1.3一维数组的使用
[ ]——下标引用操作符
1.
数组是使用下标来访问的,下标是从
0
开始。
2.
数组的大小可以通过计算得到。
1.4一维数组在内存中的储存
数组在内存中是连续存放的。
2. 二维数组的创建和初始化
2.1 二维数组的创建
// 数组创建int arr [ 3 ][ 4 ];//三行四列char arr [ 3 ][ 5 ];double arr [ 2 ][ 4 ];
2.2 二维数组的初始化
二维数组可以省略行,不能省略列
// 数组初始化int arr [ 3 ][ 4 ] = { 1 , 2 , 3 , 4 };int arr [ 3 ][ 4 ] = {{ 1 , 2 },{ 4 , 5 }};int arr [][ 4 ] = {{2,3},{4,5}}; // 二维数组如果有初始化,行可以省略,列不能省略
2.3二维数组的使用
对二维数组的理解。
可以把二维数组理解为:一维数组的数组。
2.4二维数组在内存中的存储
%p打印地址
二维数组在内存中连续存放。
储存方式相同:
3.数组越界
数组的下标是有范围限制的。
数组的下规定是从
0
开始的,如果数组有
n
个元素,最后一个元素的下标就是
n-1
。
所以数组的下标如果小于
0
,或者大于
n-1
,就是数组越界访问了,超出了数组合法空间的访问。
C
语言本身是不做数组下标的越界检查,编译器也不一定报错,但是编译器不报错,并不意味着程序就是正确的,所以写代码时,要做好越界的检查。
4.数组作为函数参数
数组在传参的时候直接给数组名。
数组传参的时候,形参有两种写法:
1.数组
2.指针
冒泡排序法:
#include<stdio.h>
//冒泡排序
//
//
//数组传参的时候,形参有2种写法:
//1. 数组
//2. 指针
//
形参是数组的形式
void bubble_sort(int arr[],int sz)
{
//趟数
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;
}
}
}
}
//形参是指针的形式
/*void bubble_sort(int* arr, int sz)
{
//趟数
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]);
//冒泡排序的算法,对数组进行排序
bubble_sort(arr, sz);
int i = 0;
for (i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
4.2 数组名是什么
数组名确实能表示首元素的地址,但是有2个例外:
1.sizeof(数组名),这里的数组名算的是整个数组的大小,单位是字节
2. &数组名,这里的数组名表示整个数组,取出的是整个数组的地址
二维数组的数组名的理解:
二维数组的数组名也表示首元素的地址,但是表示的是第一行的地址。
三行四列: