数组的概念
数组是同一种元素的集合,那么创造数组也就是创建一个空间储存同一种元素(数据)。
数组可以存放一个或者多个元素,但是元素个数不能为0。数组有一维数组、二维数组、三维数组等多维数组。多维数组最常见的是二维数组
数组创建的基本语法
type arr_name[m];
type是数组的类型,可以是:short、double、int、char...等,也可以是自定义数组类型
arr_name为数组的名字(即数组名),数组名是自定义的,自己可以取个有意义的名字
m是常量值,用来指定数组的大小,看实际情况来取数值
数组的初始化
举个例子:
int arr[10] = {0,1,2,3,4,5,6,7,8,9};
这样我们创建了了一个整型数组,我们把里面的10个元素分别初始化为0,1,2,3,4,5,6,7,8,9 。数组的下标是从0开始的,看图:
我们是要用{}来初始化的,如果我们不完全初始化,例如:
int arr[10] = {0,1,2,3,4};
那么剩下的元素全部默认为0,打印出来的结果也是0
用for循环就可以打印了
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int arr[10] = { 0,1,2,3,4 };
for (int i = 0; i < 10; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
一维数组在内存中的存储
一维数组是连续存放的,通俗简单来讲就是:同一个数组中每个元素都是邻居,他们的房子都是连在一起的。那么当我们要访问数组的时候,就要通过地址来找到相应的数组。
%p是用来打印地址的,我们可以看到每一个元素的地址都相差4,也就是相差4个字节,每个元素都申请了4个字节的空间
二维数组的创建和存储
type arr_name[m][n];
m,n都是常量值,数组名、数组类型定义和一维数组一样
m规定了这个数组的行数,n规定了数组的列数,都是从0开始标记,看个图就明白了
arr[3][5] = {1,2,3,4,5,6,7};
和一维数组一样,如果不完全初始化,其余的元素都默认为0。那么就有小伙伴好奇,如果是这样的话,岂不是要填满第一行,才能去填第二行的元素,不不不
二维数组的初始化一般是这样的,是有{}来规定位置的,看图
int arr[3][5] = {{1,2},{3,4},{5,6}};
那么他们的地址会是怎样的呢,看图:
没错,它们之间的地址也是连续的,每个元素相差4个字节,行与行之间也是相差4个字节,那么也就是说,二维数组其实可以看成这个样子
补充:
在C99之前,数组的大小(即arr[m]中的m)是不允许使用变量的,只能是常量,但是C99之后,引用了变长量,就可以使用变量了。有些编译器还是默认不允许使用变量的