简单了解数组的知识以及数组的运用
一、数组的概念
数组可以说是目前为止学到的第一个真正意义上存储数据的结构。虽然前面学习的变量也能存储数据,但变量所能存储的数据很有限。
那么到底什么是数组呢?顾名思义数组就是很多数的组合!那么这些数有没有什么要求呢,是不是不管什么数组合在一起都是数组呢?同一数组中存储的数必须满足以下两个条件:
1.这些数的类型必须相同。
2.这些数在内存中必须是连续存储的。
3.数组分为一维数组和多维数组,多维数组一般比较多见的是二维数组。
换句话说,数组是在内存中连续存储的具有相同类型的一组数据的集合。
二、一维数组
1. 一维数组的创建与初始化
1.1 一维数组创建的基本语法如下:
type name[常量值] = { 0 };
存放在数组的值被称为数组的元素,数组在创建的时候可以指定数组的大小和数组的元素类型。
- type指定的是数组存放数据的类型,如char、int、float等,当然也可以是自定义类型。
- name指定的是所创建的数组的名字(可根据实际情况起名字,尽量要起得有意义)。
- 常量值指定的是数组的大小,这个数组的大小是根据实际的需求指定就行。
- { }内的是数组的元素,根据编程所需写入相应的数据。
比如:存入一个班级20人的身高,我们就可以创建一个数组:
float height[20];
当然我们也可以创建其他类型的数组存其他数据:
char ch[8];
double score[10];
unsigned age[20];
1.2 一维数组的初始化:
有时候,数组在创建的时候,我们需要给定一些初始值,这种就称为初始化的。
那数组如何初始化呢?数组的初始化一般使用大括号,将数据放在大括号中。
数组的初始化分为两种,分别是
1.完全初始化
2.不完全初始化
//完全初始化
int arr[5] = {1,2,3,4,5};
//不完全初始化
int arr2[6] = {1};//第⼀个元素初始化为1,剩余的元素默认初始化为0
//错误的初始化 - 初始化项太多
int arr3[3] = {1, 2, 3, 4};
2. 一维数组的使用
学习了一维数组的基本语法,⼀维数组可以存放数据,存放数据的目的是对数据操作,那我们如何使用一维数组呢?下面我们来学习如何使用一维数组:
2.1 数组的下标:
C语言规定数组是有下标的,数组的每个元素都有自己相应的下标,下标就相当于数组元素的编号,下标从0开始,假设数组有n个元素,最后一个元素的下标是n-1,如下:
int arr[5] = { 1,2,3,4,5 };
在C语言中的数组访问中提供了一个操作符[ ],叫作下标引用操作符。
有了下标引用操作符,我们就可以更容易地去访问对应的元素了。比如我们想访问元素3的时候,就可以使用arr[2],想要访问元素5的时候,就可以使用arr[4]。如以下代码:
2.2 数组元素的打印:
我们已经知道数组的下标可以用来指定数组的元素,那么我们该如何访问整个数组的所有元素呢?
我们知道,数组的下标是连续的,那么这个时候就可以用我们前面所学习的for循环来实现数组下标的输入,最后访问整个数组的元素,代码如下:
#include<stdio.h>
int main()
{
int arr[5] = { 1,2,3,4,5 };
int i = 0;
for (i = 0; i < 5; i++)
{
printf("%d ", arr[i]);//利用for循环依次输入数组元素的下标
}
return 0;
}
程序运行结果:
2.3 数组的输入:
明白了数组的访问,当然我们也根据需求,自己给数组输入想要的数据,代码如下:
#include<stdio.h>
int main()
{
int i = 0;
int arr[10] = { 0 };
for (i = 0; i < 10; i++)
{
scanf("%d", &arr[i]);
}
for (i = 0; i < 10; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
输入和输出的结果:
三、二维数组
1. 二维数组的创建与初始化
1.1 二维数组创建的基本语法如下:
type name[常量值1][常量值2] = { 0 };
//例如:
int arr[3][5];
二维数组的语法与一维数组的基本一致,不同的地方就是维度,一维数组只有一行,而二维数组既有行也有列。二维数组也可以看作是由一维数组组成的数组,三维数组也可以看作是由二维数组组成的数组…
语法解析:
- 3表示数组有3行
- 5表示每⼀行有5个元素
- int表示数组的每个元素是整型类型
- arr是数组名,可以根据自己的需要指定名字
1.2 二维数组的初始化:
二维数组的初始化方法与一维数组的基本一致,都是在大括号内的,但由于维度不同,所以在初始化的形式上也会有些许不同。
- 不完全初始化:
int arr1[3][5] = { 0 };
int arr2[3][5] = { 1,2,3 };
- 完全初始化:
int arr[3][5] = { 1,2,3,4,5,2,3,4,5,6,3,4,5,6,7 };
另外,还有其他的初始化方式,就是按照行初始化,例如:
int arr[3][5] = { {1,2},{3,4},{5,6} };
这样也属于不完全初始化,但是每一行都有两个元素,{1,2}在数组的第0行,{3,4}在数组的第1行…
初始化时可以省略行,但是不能省略列: int arr[ ][5] 。
2. 二维数组的使用
二维数组的输入和输出:
访问数组的单个元素我们在上面一维数组那已经知道如何去操作了,其实访问二维数组的方法亦是如此,那我们该如何去访问整个二维数组呢?
其实方法很简单,我们只要能够按照一定的规律产生所有的行和列的数字就行;以上⼀段代码中的arr数组为例,行的选择范围是0-2,列的取值范围是0-4,所以我们可以借助循环实现生成所有的下标:
#include <stdio.h>
int main()
{
int arr[3][5];
int i = 0;//遍历⾏
//输⼊
for (i = 0; i < 3; i++) //产⽣⾏号
{
int j = 0;
for (j = 0; j < 5; j++) //产⽣列号
{
scanf_s("%d", &arr[i][j]);
}
}
//输出
for (i = 0; i < 3; i++) //产⽣⾏号
{
int j = 0;
for (j = 0; j < 5; j++) //产⽣列号
{
printf("%d ", arr[i][j]); //输出数据
}
printf("\n");
}
return 0;
}
输入和输出的结果:
关于二维数组的知识就讲到这了,接下来就开始讲解如何计算数组的大小。
四、用sizeof计算数组元素的个数
我们知道,在遍历数组的时候,我们需要知道数组的元素的个数,在某些特定的情况下是需要自己去计算出数组的大小的。C语言给我们提供了一个计算类型和变量大小的关键词:sizeof,它还能计算数组的大小。比如:
#include <stido.h>
int main()
{
int arr[10] = {0};
printf("%d\n", sizeof(arr));
return 0;
}
这里的计算结果是40,计算的是数组所占内存空间的大小,单位是字节。
前面我们了解到数组的每个元素的类型都是相同的,那么我们能不能利用数组这个特性来计算数组里每个元素的大小呢?答案是肯定的:
#include <stido.h>
int main()
{
int arr[10] = {0};
printf("%d\n", sizeof(arr[0]));//计算⼀个元素的⼤⼩,单位是字节
return 0;
}
计算完一个元素的大小就可以计算数组的元素个数了:
#include <stido.h>
int main()
{
int arr[10] = {0};
int sz = sizeof(arr)/sizeof(arr[0]);
printf("%d\n", sz);
return 0;
}
这里的计算结果就是10,即这个数组有10个元素
以后在代码中需要数组元素个数的地方就不用固定写死了,使用上面的计算,不管数组怎么变化,计算出的大小也就随着变化了。
好了,对数组的讲解就到这了,如果喜欢我的博客就请给个免费的小红心吧,下一篇博客再见!