目录
编辑
1.一维数组的创建和初始化
1.1一维数组的创建:
1.2 一维数组的初始化 :
2.二维数组的创建的初始化
2.1二维数组的创建:
2.2二维数组的初始化:
3.数组越界
4.数组的使用
4.1一维数组的使用:
4.2二维数组的使用:
4.3数组作为函数参数
总结:
1.一维数组的创建和初始化
1.1一维数组的创建:
数组是一组相同类型元素的集合
type_t arr_name [const_n];
//type_t 是指数组的元素类型
//const_n 是一个常量表达式,用来指定数组的大小
创建实例:
int arr[10]; //创建大小为10的整型数组
注:数组创建,C99之前,数组只能常量表示大小,
C99之后,引用了变长数组,数组的大小可以用变量表示。
但在vs2022.vs2019都不支持变长数组,变长数组不能初始化,就是不能赋一些值
1.2 一维数组的初始化 :
在创建数组的同时给数组的内容一些合理初始值(初始化)
数组在创建的时候如果不指定大小就得初始化,数组的元素个数根据初始化的内容来确定
数组不完全初始化,剩余的元素默认初始化为0
int arr[5];
int sz = sizeof(arr)/sizeof(arr[0]); //计算数组大小
2.二维数组的创建的初始化
2.1二维数组的创建:
//数组创建
int arr[2][4];
char arr[4][5];
2.2二维数组的初始化:
二维数组初始化,可以省略行,但不能省略列
int arr[3][5] = { {1,2,3,4,5},{2,3,4,5,6},{3,4,5,6,7} };
//也可以
int arr[][5] = { {1,2},{2,3},{3,4} };
int arr[3][4] = {1,2,3,4};
3.数组越界
数组的下标是有范围限制的。
数组下标从0开始,如果数组有n个元素,最后一个元素的下标就是n-1。
所以数组的下标如果小于0,或者大于n-1,就是数组越界访问了,超出了数组合法空间的访问。
4.数组的使用
4.1一维数组的使用:
int arr[10] = {0}; //不完全初始化
int sz = sizeof(arr) / sizeof(arr[0]); //计算元素个数
//初始化
for (int i = 0; i < sz; i++)
{
arr[i] = i;
}
//输出
for (int i = 0; i < sz; i++)
{
printf("%d ", arr[i]); //0 1 2 3 4 5 6 7 8 9
}
4.2二维数组的使用:
int arr[3][4] = { 0 }; //不完全初始化
//初始化
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 4; j++)
{
arr[i][j] = i*4+j;
}
}
//输出
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 4; j++)
{
printf("%d ", arr[i][j]); //0 1 2 3 4 5 6 7 8 9 10 11
}
}
4.3数组作为函数参数
数组名就是地址,通常来说:数组名是数组首元素的地址
但是有2个例外:
- sizeof(数组名),这里的数组名表示的整个数组,计算的是整个数组的大小,单位是字节。
- &数组名,这里的数组名表示整个数组,取出的是整个数组的地址。
除此之外,所有遇到的数组名都是数组首元素的地址。
注:数组传参的本质是指针,传递的是数组首元素地址
但是形参也可以是数组接收,也可以指针接收。
两个数组要进行交换,只能一个元素一个元素进行交换。利用变量进行循环交换,因为数组名是一个地址,是一个常量值
//void sort(int arr[],int sz)
void sort(int* arr, int sz)
这两种方式传参都可以
总结:
1.数组再内存中是连续存放的,随着下标的增长,数组元素的地址由低到高
2.数组是使用下标来访问的,下标是从0开始。
3.数组大小可以通过计算得到
感谢你看到这里,以上是我对数组的简单概括,身为初学者,自知有很多不足和需要改善的说法,怀着对编程热爱的心,望得到指点!!!点亮每一颗星星。