数组
数组是个啥
数组是一组相同类型元素的集合
数组分为一维数组和多维数组,多维数组比较常见的是二维数组
一维数组的创建和初始化
一维数组的建立的基本语法
type arr_name[常量]
存放的数组的值被称为数组的元素,在创建时可以指定数组的大小和数组的元素类型
比如想创建某班20个人的数学成绩
int math[20]
数组的初始化
初始化有完全初始化和不完全初始化
int arr[5] = {1,2,3,4,5};//完全初始化
int arr[5] = {1};//不完全初始化,其余的元素默认为0
数组的类型
int arr1 [3];
int arr2 [12];
arr1数组的类型是int [3]
arr2数组的类型是inr [12]
总之去除数组名字剩下的就是数组类型
一维数组的使用
C语言规定的数组是有下标的
int arr[5]={1,2,3,4,5}
数组中元素的下标分别是0,1,2,3,4,下标从0开始
如果我想使用一个标,只需要直到他对应的下标,再来依据使用的方式使用他
比如我想访问下标是3的元素,那我们可以用arr[3]来访问,
print("%d",arr[3])//打印下数组中标为3的元素
当然,如果想输入一个元素嘞?
scanf("%d",&arr[3])//将下标为3的数组替换成输入的那个数
而且,数组在内存中是连续存放的,知道其中一个元素的地址,其他元素的地址是可以推出来的
sizeof计算数组元素的占用内存
sizeof是C语言的一个关键字,可以知道类型和变量的大小,当然也可以知道数组的大小(计算出元素占字节的大小)
#include <stdio.h>
int main( )
{
int arr[10] = {0};
print("%zd",sizeof(arr));//打印出arr这个数组占用了多少字节
return 0;
}
二维数组的使用
如果一维数组打印出来是一长溜元素,那么二维数组打印出来就是有行和列的总体像长方形形状的元素
那么二维数组怎么建立
int arr[//行][//列] = {1,2,3,4,5};//生成一个几行几列的二维数组
二维数组的初始化
如果不做变化的把二维数组的变量一直写下去
int arr[3][4]={1,2,3,4,5,6,7};
那么就从第一行开始顺着写下去,一行写满了就换行写,写不满的地方默认为0
如果想规定呢?
int arr[3][3]={{1,2}{2,3}{1,2}}
就是在第一行输入1和2,换行在第二行输入2和3,换行在第三行输入1和2(按顺序)
初始化省略
数组像字符串一样,可以省略数组元素的个数,但是只能省略行,不能省略列,因为列是不知道有多少的,电脑也不能按照你输入的值默认,因为电脑不知道你输入的值在哪里换行
二维数组的下标
二维数组和一维数组一样有下标,但是长什么样子呢?
一维数组可以用第几个来找到函数,二维数组也可以用第几行第几列来找到元素,下标同样从0开始递增,不过变成两个下标值定义
printf("%d",arr[2][3])//打印的就是第3行第4列的元素,因为从零开始递增,所以行列数加一
同样,二维数组和一维数组一样,都每个元素都是连续存放的,跨行处的元素也是连续的,意思是二维数组的元素在内存中应该是这样
1,2,3,4,5
6,7,8,9,1
2,3,4,5,6
事实上在内存中是这样表示的
1,2,3,4,5,6,7,8,9,1,2,3,4,5,6
都是连续存放的
C99中的变长数组
在C99标准之前,C语言在创建数组的时候,数组的大小指定只能用常量和常量表达式,或者可以省略数组大小
而C99中的一个变长数组的新特性允许我们可以使用变量指定数组大小
int n = 2 + 3
int arr[n]
这样数组的大小就更灵活
但是一些编译器不支持C99中的变长数组,像是VS2022,使用时要注意