啊哈,时隔一个月,终于是开始写第二篇正式的博客了。这次我想写写数组,简单介绍一下数组,以及如何使用。
1.数组的概念
数组是一组相同类型元素的集合。数组可以存放一个及多个数据,但不能是零。且存放的数据类型必须相同。
数组分为一维数组和多维数组,我们比较常用的是一维数组和二维数组。
一维数组
2.一维数组的创建
2.1 数组创建
type arr_name[常值量];
type:数组存放的类型,如int、char、float等,也可以是自定义的类型。
arr_name:数组的名字,根据实际情况自行定义。
[ ]:根据实际情况指定数组的大小。
例如:如果我们现在想用数组来存放班上十个人的高数成绩,我们就可以创建一个数组,如下:
int math[10];
2.2 数组的初始化
有些时候我们需要给数组一些初始值,即对数组初始化。
数组的初始化如下:
//完全初始化
int arr1[5]={1,2,3,4,5};
//不完全初始化
int arr2[5]={1};//第一个元素初始化为1,其余元素默认初始化为0
要注意初始化的个数不能大于数组本身能接受的元素总数。
2.3 数组的类型
数组是有类型的,数组算是一种自定义类型,去除数组名留下的就是数组的类型。如下:
int arr[5];
char ch[10];
arr数组的类型为int [10]
ch数组的类型为char [10]
3.一维数组的使用
介绍完一维数组的基本知识,下面来介绍如何使用一维数组。
3.1 数组下标
C语言规定数组是有下标的,下标从0开始,而不是从1开始。
我们定义如下一个数组:
int arr[10]={1,2,3,4,5,6,7,8,9,10};
那么
数组 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
下标 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
在C语言中数组的访问提供了一个专门的操作符[ ],该操作符名为:下标引用操作符
这个操作符方便我们访问数组元素,如下:
#include<stdio.h>
int main()
{
int arr[10]={1,2,3,4,5,6,7,8,9,10};
printf("%d",arr[5]);
return 0;
}
这样子我们就可以访问数组中下标为5的元素。输出结果如下:
3.2 数组元素的打印
现在如果我们想打印数组中的全部内容。
我们可以运用之前所学到的for循环的知识,遍历数组的每一个下标。如下:
#include<stdio.h>
int main()
{
int arr[10]={1,2,3,4,5,6,7,8,9,10};
int i=0;
for(i=0;i<10;i++)
{
printf("%d ",arr[i]);
}
}
输出结果如下:
3.3 数组元素的输入
明白了数组的访问,我们接下来应该知道如何根据需求,给数组输入数组,如下:
#include<stdio.h>
int main()
{
int arr[10]={1,2,3,4,5,6,7,8,9,10};
int i=0;
for(i=0;i<10;i++)
scanf("%d",&arr[i]);
for(i=0;i<10;i++)
printf("%d ",arr[i]);
}
我们来运行该程序并输入,可以得到如下结果:
4.计算数组元素的个数
在遍历数组的时候,若我们想知道数组的元素个数,我们可以用sizeof来计算。
sizeof是C语言中的一个关键字,可以计算类型或者变量大小的,也可以计算数组的大小
如下:
#include<stdio.h>
int main()
{
int arr[10]={0};
printf("%d\n",sizeof(arr));
return 0;
}
运行结果如下:
输出结果为40,计算的是数组所占内存空间的大小,单位是字节。
在数组中所有元素的类型都是相同的,那么只要计算出一个元素所占字节的个数,那么就可以计算出数组中的元素个数。我们可以选择第一个元素计算大小。
#include<stdio.h>
int main()
{
int arr[10]={0};
printf("%d\n",sizeof(arr[0]));
return 0;
}
可以计算出一个元素的大小为4。
接下来我们就可以计算数组的元素个数:
#include<stdio.h>
int main()
{
int arr[10]={0};
int sz=sizeof(arr)/sizeof(arr[0]);
printf("%d\n",sz);
return 0;
}
输出结果为10,表示数组中有10个元素。
二维数组
5.二维数组的创建
5.1 二维数组的概念
学习了一维数组,我们现在来学习一下二维数组。它由多个一维数组组成,每个一维数组又可以包含多个元素。可以将二维数组类比为一个表格或者矩阵,其中行表示第一个维度,列表示第二个维度。
5.2二维数组的创建
定义二维数组的语法如下:
type arr_name[常值量1][常值量2];
例如:
int arr[3][5];
解释:3 表示数组有3行
5 表示每一行有5个元素
int 表示数组的元素类型为整形
arr 是数组名,根据实际情况自行定义
6.二维数组的初始化
6.1 不完全初始化
int arr1[3][5]={1,2};
我们可以用表格来展示一下arr1这个数组如何存放元素
0 | 1 | 2 | 3 | 4 | |
0 | 1 | 2 | 0 | 0 | 0 |
1 | 0 | 0 | 0 | 0 | 0 |
2 | 0 | 0 | 0 | 0 | 0 |
6.2 完全初始化
int arr2[3][5]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
同样我们也用表格来展示一下
0 | 1 | 2 | 3 | 4 | |
0 | 1 | 2 | 3 | 4 | 5 |
1 | 6 | 7 | 8 | 9 | 10 |
2 | 11 | 12 | 13 | 14 | 15 |
6.3 按照行初始化
int arr3[3][5]={{1,2},{3,4},{5,6}};
表格演示如下:
0 | 1 | 2 | 3 | 4 | |
0 | 1 | 2 | 0 | 0 | 0 |
1 | 3 | 4 | 0 | 0 | 0 |
2 | 5 | 6 | 0 | 0 | 0 |
6.4 初始化时能省略行,但不能省略列
下面有三个例子:
int arr4[][5]={1,2,3};
0 | 1 | 2 | 3 | 4 | |
0 | 1 | 2 | 3 | 0 | 0 |
int arr5[][5]={1,2,3,4,5,6,7,8};
0 | 1 | 2 | 3 | 4 | |
0 | 1 | 2 | 3 | 4 | 5 |
1 | 6 | 7 | 8 | 0 | 0 |
int arr6[][5]={{1,2},{3,4},{5,6}};
0 | 1 | 2 | 3 | 4 | |
0 | 1 | 2 | 0 | 0 | 0 |
1 | 3 | 4 | 0 | 0 | 0 |
2 | 5 | 6 | 0 | 0 | 0 |
以上就是关于二维数组初始化的全部内容了,接下来我们来了解一下如何使用二维数组。
7.二维数组的使用
7.1 二维数组的下标
访问二维数组同样也是使用下标的形式,二维数组有行和列,只要锁定了二维数组中的行和列,就可以锁定数组中的一个元素。
C语言规定,二维数组的行和列都是从0开始,如下所示:
int arr[3][5]={1,2,2,3,3,4,5,6,7,7,7,8,8,8,9};
表格演示如下:
0 | 1 | 2 | 3 | 4 | |
0 | 1 | 2 | 2 | 3 | 3 |
1 | 4 | 5 | 6 | 7 | 7 |
2 | 7 | 8 | 8 | 8 | 9 |
当我们锁定第二行,第四列,便可以快速锁定数组元素为9.
代码演示:
#include<stdio.h>
int main()
{
int arr[3][5]={1,2,2,3,3,4,5,6,7,7,7,8,8,8,9};
printf("%d\n",arr[2][4]);
return 0;
}
运行结果如下:
7.2 二维数组的输入和输出
我们已经了解如何访问数组中的某个元素,下面我们来学习一下如何实现二维数组的输入和输出。
实际上我们可以通过循环来实现生成所有的下标,帮助我们将元素与存放位置一一对应。
代码如下:
#include<stdio.h>
int main()
{
int arr[3][5];
int i=0;
int j=0;
for(i=0;i<3;i++)
{
for(j=0;j<5;j++)
{
scanf("%d",&arr[i][j]);
}
}
//以上代码可以实现输入
for(i=0;i<3;i++)
{
for(j=0;j<5;j++)
{
printf("%d ",arr[i][j]);
}
printf("\n");
}
//以上代码可以实现输出
return 0;
}
输入和输出结果如下:
数组在内存中的储存
8.1 一维数组在内存中的储存
学习了上面的知识,我们其实使用数组基本就没什么障碍了,这部分内容可以帮助我们深入了解数组,有利于我们未来学习指针的相关知识。
我们来了解一下数组在内存中的存储。
我们可以通过代码依次打印数组元素的地址,如下:
#include<stdio.h>
int main()
{
int arr[10]={1,2,3,4,5,6,7,8,9,10};
int i=0;
for(i=0;i<10;i++)
{
printf("&arr[%d]=%p\n",i,&arr[i]);
}
}
运行结果如下:
我们通过观察可以发现,随着下标的增大,地址也在增大,并且每个元素之间相差4(一个整型是4个字节)。因此我们得到结论:数组在内存中是连续存放的。
8.2 二维数组在内存中的储存
与一维数组一样,我们也能通过代码打印出二维数组中所有元素的地址。代码如下:
#include<stdio.h>
int main()
{
int arr[3][5];
int i = 0;
int j = 0;
for (i = 0; i < 3; i++)
{
for (j = 0; j < 5; j++)
{
printf("&arr[%d][%d]=%p\n", i, j, &arr[i][j]);
}
}
return 0;
}
运行结果如下:
我们可以发现,哪怕是跨行位置的两个数列之间也只差4个字节,例如arr[0][4]和arr[1][0]。
因此二维数组中的每个元素也是连续存放的。
结束语
以上便是这篇文章的全部内容了,欢迎大家指出文章的不足和错误,如果觉得看完有所收获,也希望能点个赞什么的。