【C语言】一维数组和二维数组

本文详细介绍了C语言中一维数组的创建、初始化、类型以及下标使用,随后扩展到二维数组的概念、初始化方式和下标操作,包括元素的输入输出和计算数组元素个数的方法。
摘要由CSDN通过智能技术生成

1. 一维数组

1.1 数组的创建

一维数组创建的基本语法如下:

type arr_name[常量值];   //arr_name表示数组名

①  type 指定的是数组中存放数据的类型,可以是:charshortintfloat等,也可以自定义的类型;

②  arr_name 指的是数组名的名字,这个名字根据实际情况,自己定义即可;

③  [] 中的常量值是⽤来指定数组的⼤⼩的,这个数组的⼤⼩是根据实际的需求指定就⾏;

比如我们可以定义以下数组:

int math_score[30];//存储某班30人的数学成绩

char arr[10];//字符类型数组

//浮点型数组
double arr[10];
float  arr[10];

1.2 数组的初始化

//完全初始化
int arr[5] = {1,2,3,4,5};

//不完全初始化
int arr2[6] = {1};//第⼀个元素初始化为1,剩余的元素默认初始化为0

//错误的初始化 - 初始化项太多 - 超出数组大小的范围
int arr3[3] = {1, 2, 3, 4};

1.3 数组的类型

数组也是有类型的,数组算是⼀种⾃定义类型,去掉数组名留下的就是数组的类型。
如下:
int arr1[3];

char arr2[4];

double arr3[5];

arr1 数组的类型是 int [3]

arr2 数组的类型是 char [4]

arr3 数组的类型是 double [5]

#include <stdio.h>

//我们来打印各个数组的类型,来了解各个数组所占空间的大小 - 单位是字节
int main()
{
	int arr1[3] = { 0 };//int - 一个元素所占空间大小为4个字节
	printf("%d\n", sizeof(int [3]));

	char arr2[4] = { 'a' };//char - 一个元素所占空间大小为1个字节
	printf("%d\n", sizeof(char [4]));

	double arr3[5] = { 0.0 }; //double - 一个元素所占空间大小为8个字节
	printf("%d\n", sizeof(double [5]));

	return 0;
}

运行结果:

ce1bc01c295a44c1b2b03dcd41f08cdd.png

2. 一维数组的使用

学习了⼀维数组的基本语法,⼀维数组可以存放数据,存放数据的⽬的是对数据的操作,那我们如何使⽤⼀维数组呢?

2.1 一维数组的下标

C语⾔规定数组是有下标的,下标是从0开始的,假设数组有n个元素,最后⼀个元素的下标是
n-1,下标就相当于数组元素的编号,如下:
int arr[10] = {1,2,3,4,5,6,7,8,9,10};

fa1d4b7971da4e94902ae5f9b1bc8441.png

有了数组的下标,我们就可以轻松地访问数组的元素,比如我们要访问下标为5的元素,我们就可以使用 arr[5],想要访问下标是9的元素,就可以使用 arr[9],但切记不能使用 arr[10],因为这已经超出arr 数组的范围,arr 数组最大只能到 arr[9],如若强行引用 arr[10],则只能得到一个随机值。

例子:

#include <stdio.h>

int main()
{
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	printf("%d\n", arr[5]);
	printf("%d\n", arr[9]);
	printf("%d\n", arr[10]);//err

	return 0;
}

运行结果:

c9ba5cbd08ef41b8a1ed310955c7c50e.png

2.2 数组元素的输入和输出

接下来,如果想要访问整个数组的内容,实现整个数组的输入和输出,该怎么办呢?

只要我们能够产生数组所有元素的下标就可以了,我们可以使用 for 循环产生0~9的下标,接下来使用下标来访问数组就行了。

例子:实现1~10的输入,然后再将1~10输出

#include <stdio.h>

int main()
{
	int i = 0;
	int arr[10] = { 0 };//这里是定义数组的长度,一旦定义完成,数组大小就是完全确定的

	//输入1~10
	for (i = 0; i < 10; i++)
	{
		scanf("%d", &arr[i]);
	}

	//输出1~10
	for (i = 0; i < 10; i++)
	{
		printf("%d ", arr[i]);
	}

	return 0;
}

运行结果:

48e9a5edb79a44ca9254ff3a28b9324a.png

2.3 sizeof 计算数组元素的个数

假如说你想知道一个数组的大小,但是它只给了你一组数组里面的元素,并没有给数组的长度,比如:arr [] = {2,6,7,9,17,24,36,45,66,32};试想这么长的一个数组,里面有多少元素,我们不知道,得一个个数才能知道,那我们有什么方法能快速计算出数组元素吗?当然有,那就是 sizeof 。

例子:计算 arr [] = {2,6,7,9,17,24,36,45,66,32} 数组元素的个数

#include <stdio.h>

int main()
{
	int arr[] = { 2,6,7,9,17,24,36,45,66,32 };//定义一个数组,没有说明数组长度
	int num = sizeof(arr) / sizeof(arr[0]);//计算数组个数
	printf("%d\n", num);

	return 0;
}

运行结果:

fbb329088be54034ba51943060ffba6b.png

为什么我们可以通过这种方法去计算数组元素的个数呢?这是因为,sizeof(arr) 计算的是整个数组arr 所占空间的大小 - 单位是字节,而 sizeof(arr[0]) 计算的是首个元素 arr[0] 所占空间的大小 - 单位是字节,又因为 arr 数组里所有的元素类型相同,所以所占空间大小是一样的,故而我们可以通过 num = sizeof(arr) / sizeof(arr[0]) 来计算数组元素个数。

3. 二维数组的创建

前⾯学习的数组被称为⼀维数组,数组的元素都是内置类型的,如果我们把⼀维数组做为数组的元
素,这时候就是⼆维数组,⼆维数组作为数组元素的数组被称为三维数组,⼆维数组以上的数组统称 为多维数组。

aaa600658bd7454787ae9eec8bdb1c59.png

3.1 二维数组的概念

那我们如何定义二维数组呢?语法如下:

type arr_name[常量1][常量2];

//例如
int arr[3][6];//3表示数组有3行,6表示每一行有6个元素,int表示数组的每个元素是整型类型

double data[2][8];//2表示数组有2行,8表示每一行有8个元素,double表示数组的每个元素是浮点型类型

对比一维数组 arr[10], 一维数组可以看作是:数组名+变量,数组名是:arr,变量是:10;而二维数组 arr[3][6] 同样也可以看作是:数组名+变量,它的数组名是:arr[3],变量是:6。这样我们就可以很好地将一维数组和二维数组联系起来,二维数组可以看作将一维数组作为二维数组的元素而构成的数组,这里就值得大家细细思考。

4. 二维数组的初始化

在创建变量或者数组的时候,给定⼀些初始值,被称为初始化。
那⼆维数组如何初始化呢?像⼀维数组⼀样,也是使⽤⼤括号初始化的。

4.1 不完全初始化

int arr1[3][6] = {0};
int arr2[3][6] = {1,2};

68d4e521019f4f2bb0859c4480c2cf25.png

4.2 完全初始化

int arr3[3][6] = {1,2,3,4,5,6, 2,3,4,5,6,7, 3,4,5,6,7,8};

3919201187d94ae8a8317104276ebc7d.png

4.3 按照行初始化

int arr4[3][6] = {{1,2},{3,4},{5,6}};

f2ea800fada1423d9bf04412b7dcee07.png

4.4 初始化时省略行,但是不能省略列

int arr5[][6] = {1,2,3};
int arr6[][6] = {1,2,3,4,5,6,7,8};
int arr7[][6] = {{1,2}, {3,4}, {5,6}};

987a0f07ae9242208784509b18203222.png

5. 二维数组的使用

5.1 二维数组的下标

当我们掌握了⼆维数组的创建和初始化,那我们怎么使⽤⼆维数组呢?其实⼆维数组访问也是使⽤下标的形式的,⼆维数组是有⾏和列的,只要锁定了⾏和列就能唯⼀锁定 数组中的⼀个元素。C语⾔规定,⼆维数组的⾏是从0开始的,列也是从0开始的,如下所⽰:
int arr[3][6] = {1,2,3,4,5,6, 2,3,4,5,6,7, 3,4,5,6,7,8};

01a5fcfe463148d49c11b7ecbdf1152e.png

蓝色代表列下标,紫色代表行下标。⽐如,我们说:第1 ⾏,第4列,快速就能定位出6。

#include<stdio.h>

int main()
{
	int arr[3][6] = { 1,2,3,4,5,6, 2,3,4,5,6,7, 3,4,5,6,7,8 };
	printf("%d\n", arr[1][4]);

	return 0;
}

运行结果:

3434e787e7354f628979f8e848755745.png

5.2 二维数组的输入和输出

访问⼆维数组的单个元素我们知道了,那如何访问整个⼆维数组呢?
其实我们只要能够按照⼀定的规律产⽣所有的⾏和列的数字就⾏;以上⼀段代码中的 arr 数组为例,⾏ 的选择范围是0~2,列的取值范围是0~5,所以我们可以借助循环实现⽣成所有的下标。
#include<stdio.h>

int main()
{
	int arr[3][6] = { 0 };

	//输入
	for (int i = 0; i < 3; i++)
	{
		for (int j = 0; j < 6; j++)
		{
			scanf("%d", &arr[i][j]);
		}
	}
	printf("\n");

	//输出
	for (int i = 0; i < 3; i++)
	{
		for (int j = 0; j < 6; j++)
		{
			printf("%d ", arr[i][j]);
		}
		printf("\n");
	}

	return 0;
}

运行结果:

420d6e9d555d42758f549b73beb99a71.png

  • 27
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值