一篇文章让你数组入门到精通
数组的基本概念
首先,我们需要了解什么事数组,数组是一组相同元素的集合
这里面有两个关键点:1.数组里面可以存放一个或多个数据,但所存放的数据不能为0
2.数组里面存放的数据,类型是相同的。
数组分为一维数组和多维数组,常见的多维数组是二维数组。
一维数组的创建和初始化
数组的创建
一维数组创建的常用语法如下
type arr_name[常量值];
type表示数据的类型,可以是int float char double,也可以是自定义类型
arr_name指的是数组名的名字,可以根据自己的需要,取得有意义就好
【】的常量值是用来指定数组的大小的,这个数组的大小根据实际的需要指定就行。
比如,我们想现在存储一个班20个人的数学成绩,我们可以创建一个数组
1.int math[20];
当然,我们也可以根据需要来创建其他类型和大小的数组
1. char ch[8];
2.double arr[20];
数组的初始化
有时候,我们在创建数组的时候,需要根据需要对数组提供一些初始的值,这就叫做数组的初始化。
那数组应该怎么初始化呢,我们可以看下面的代码块
//完全初始化:
int ch[8] = { 1,2,3,4,5,6,7,8 };//不完全初始化,只提供了一个1,默认其他的七个值为0
int ch[8] = { 1 };//错误的初始化,超过了所能容纳的值,程序会报错
int ch[1] = { 4,5,6 };
数组的类型
数组也是有类型的,且大多数都是自定义类型,去掉组名后其余的部分就是数组的类型,例如:
int arr1[3];
int arr2[4];
int arr3[4];
arr1 的类型是int [3];
arr2 的类型是int [4];
arr3 的类型是int [4];
一维数组的使用
上面我们讲述了一维数组的基本语法,一维数组可以存放数据,存放的数据的目的是为了方便对数据的操作,下面我们讲一些它的使用。
数组下标
C语言规定数组中的元素是有下标的,下标就类似于数组元素的编号,数组下标是从0开始,要是假设有n个数据,则最后一个数据的下标是n-1;
在c语言中,我们提供了一种下标引用操作符-[],我们可以用这个操作符,来访问我们所需要的那个数据。请看下面的代码。
#include<stdio.h>
int main()
{
int arr[8] = {1,2,3,4,5,6,7,8};
printf("%d", arr[4]);
}
数组元素的打印
那么,我们要是想要打印整个数组的数据,该怎么办呢?,这个时候,我们就可以利用到循环语句,请看下面的代码块
例子:在屏幕上打印出数组的全部数据
#include<stdio.h>
int main()
{
int i;
int arr1[8] = { 1,2,3,4,5,6,7,8 };
for (i = 0; i < 8; i++)
{
printf("%d ", arr1[i]);
}return 0;
}
数组的输入
明白了数组了打印,接下来我们需要了解一下数组的输入,将自己想打印出来的数字输入到数组中去。
#include<stdio.h>
int main()
{
int ch[8];
int i;
for (i = 0; i < 8; i++)
{
scanf("%d", &ch[i]);
}
for (i = 0; i < 8; i++)
{
printf("%d ", ch[i]);
}
return 0;
}
一维数组在内存中的存储
看了上面的内容,其实数组就已经入门了,我们要是想要详细了解一下数组的话,就先看一下数组在内存中的存储,请看下面的代码。
#include<stdio.h>
int main()
{
int arr[8] = { 1,2,3,4,5,6,7,8 };
int i;
for (i = 0; i < 8; i++)
{
printf("&arr[%d]=%p\n ", i, &arr[i]);
}return 0;
}
从上面的代码中我们可以看到下面的运算结果。

从这个结果当中我们可以看到,运算结果从上到下是依次增加的,并且每一次都会+4(每一个整型就是4个字节),所以我们得出结论,数组的数据在内存中是连续存放的,这就为我们接下来的使用指针访问数组奠定了基础。
sizeof计算数组元素个数
在这个时候,有没有一种冲动,想要知道数组的个数,如果我们想这个干,我们应该怎么办呢,在C语言当中有计算数组元素个数的函数吗,有的,那就是sizeof
sizeof在c语言中是一个关键字,他是可以计算类型和元素大小的,我们就可以利用他来计算出数组元素的大小,具体的例子呢,我们可以看下面的代码块:
#include<stdio.h>
int main()
{
int arr[8] = { 0 };
printf("%d ", sizeof(arr));return 0;
}
这里得出的结果是32,计算的是数组占用的内存空间的总大小,单位是字节。
我们又知道数组中所有元素的类型是一样的,所以我们就可根据总大小和每个元素所占据的大小,就可以计算出数组元素的个数。
详细的代码块描述如下:
#include<stdio.h>
int main()
{
int arr[10];
int sz = sizeof(arr) / sizeof(arr[0]);
printf("%d ", sz);
return 0;
}
这里的结果是10,表示数组有10个元素。
以后在代码中需要元素个数的地方就不用写死了,使用上面的计算,无论数组怎么变化,计算出的大小也就随着变化了。
二维数组的创建
二维数组的概念
前面我们所讲的内容的一维数组,数组的元素是内置型的,我们要是将一维数组当成元素,得到的就是二维数组,同理,将二维数组当成元素,得到的就是三维数组,就类似于点成面。
二维数组的定义
那么二维数组的类型长什么样子呢,看如下代码块
type arr_name[a][b];
a表示有a行
b表示的是一行有b个元素
type表示的是类型
arr_name表示的是类型名,可以自定义
二维数组的初始化
不完全初始化
二维数组的不完全初始化和一维数组极其类似
int arr[8][4]={3,4};
展开后,该数组会横着在第一行排3和4,剩下的均为0
完全初始化
二维数组的完全初始化,就和一维数组的类似,按着行排从低到高,从左到右,0为开始。
以行为标准的初始化
int arr[3][5]={{3,4},{3,5},{1,2}};
这样子,数组呈现出来的话,一共有三行,每行只有两个元素。
二维数组的使用
二维数组的下标
同一维数组一样,二维数组也是有下标的,每一行和每一列均为0开始。举个例子:
#include<stdio.h>
int main()
{
int arr[3][4] = { 1,2,3,4,5,6,7,8,9,10,11,12 };
printf("%d ", arr[2][3]);return 0;
}