首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >C语言 —— 浮生百态 生灭有时 - 数组

C语言 —— 浮生百态 生灭有时 - 数组

作者头像
迷迭所归处
发布于 2025-02-19 01:51:42
发布于 2025-02-19 01:51:42
6600
代码可运行
举报
文章被收录于专栏:动态规划动态规划
运行总次数:0
代码可运行

1. 数组的概念

数组是⼀组相同类型元素的集合;从这个概念中我们就可以发现2个有价值的信息: 1. 数组中存放的是1个或者多个数据,但是数组元素个数不能为0 2. 数组中存放的多个数据,类型是相同的 3. 数组分为⼀维数组和多维数组,多维数组⼀般⽐较多⻅的是⼆维数组 4. 数组可以没有初始值和大小

2. ⼀维数组的创建和初始化

2.1 数组创建

⼀维数组语法形式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
type arr_name[常量值];

int arr[20] = {0};

存放在数组的值被称为数组的元素,数组在创建的时候可以指定数组的大小和数组的元素类型

type 指定的是数组中存放数据的类型,如: char、short、int、float 等,也可以自定义类型

arr_name 指的是数组名的名字,这个名字根据实际情况,起的有意义就行

[] 中的常量值是用来指定数组的大小的,这个数组的大小是根据实际的需求指定就行

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int math[20];

char ch[8];

double score[10];

2.2 数组的初始化

将数据放在大括号中就是数组的初始化

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//完全初始化
int arr[5] = { 1,2,3,4,5 };

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

//错误的初始化 - 初始化项太多
int arr3[3] = { 1, 2, 3, 4 };

2.3 数组的类型

数组也是有类型的,数组算是⼀种自定义类型,去掉数组名留下的就是数组的类型

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int arr1[10];

int arr2[12];

char ch[5];

arr1数组的类型是 int [10] arr2数组的类型是 int[12] ch 数组的类型是 char [5]

3. ⼀维数组的使用

我们知道,⼀维数组可以存放数据,存放数据的目的是对数据的操作,那么我们应该如何使用呢?

3.1 数组下标的访问

C语言规定数组是有下标的,下标是从0开始的,假设数组有n个元素,最后⼀个元素的下标是n-1,下标就相当于数组元素的编号

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int arr[10] = {1,2,3,4,5,6,7,8,9,10};

在C语⾔中数组的访问提供了⼀个操作符 [] ,这个操作符叫:下标引⽤操作符 有了下标访问操作符,我们就可以轻松的访问到数组的元素了

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main()
{
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	//访问下标为2的元素
	printf("%d\n", arr[2]);
	//访问下标为3的元素
	printf("%d\n", arr[3]);
	return 0;
}

访问整个数组的内容

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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]);
	}
	return 0;
}

4. ⼀维数组在内存中的存储

依次打印数组元素的地址

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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]);
	}
	return 0;
}

我们发现每两个相邻的元素之间相差4(因为⼀个整型是4个字节),所以我们得出结论:数组在内存中是连续存放的


5. ⼆维数组的概念

我们把⼀维数组做为数组的元素,这时候就是⼆维数组,⼆维数组作为数组元素的数组被称为三维数组,⼆维数组以上的数组统称为多维数组

5.1 ⼆维数组的创建

二维数组语法形式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
type arr_name[常量值1][常量值2];

例如:
int arr[3][5];
double data[2][8];

3表⽰数组有35表⽰每⼀⾏有5个元素
int 表⽰数组的每个元素是整型类型
arr 是数组名,可以根据⾃⼰的需要指定名字
data数组意思基本⼀致。

5.2 ⼆维数组的初始化

⼆维数组的初始化和⼀维数组⼀样,也是使⽤⼤括号初始化的

不完全初始化

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int arr1[3][5] = {1,2};
int arr2[3][5] = {0};

完全初始化

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int arr3[3][5] = {1,2,3,4,5, 2,3,4,5,6, 3,4,5,6,7};

2345为第一行,23456为第二行,34567为第三行

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int arr5[][5] = { 1,2,3 };

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

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

6. ⼆维数组的使用

6.1 ⼆维数组的下标

⼆维数组的访问也是使⽤下标的形式的,⼆维数组是有⾏和列的,只要锁定了⾏和列就能唯⼀锁定数组中的⼀个元素 C语⾔规定,⼆维数组的⾏是从0开始的,列也是从0开始的

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int arr[3][5] = {1,2,3,4,5, 2,3,4,5,6, 3,4,5,6,7};
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int main()
{
	int arr[3][5] = { 1,2,3,4,5, 2,3,4,5,6, 3,4,5,6,7 };

	printf("%d\n", arr[2][4]);
	printf("%d\n", arr[2][2]);
	printf("%d\n", arr[1][4]);

	return 0;
}

打印整个二维数组

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int main()
{
	int arr[3][5] = { 1,2,3,4,5, 2,3,4,5,6, 3,4,5,6,7 };
	int i = 0;//遍历⾏
	//输⼊
	for (i = 0; i < 3; i++) //产⽣⾏号
	{
		int j = 0;
		for (j = 0; j < 5; j++) //产⽣列号
		{
			scanf("%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;
}

6.2 二维数组的存储

像一维数组⼀样,我们如果想研究⼆维数组在内存中的存储方式,我们也是可以打印出数组所有元素的地址

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int main()
{
	int arr[3][5] = { 0 };
	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;
}

和一维数组一样,⼆维数组中的每个元素也是连续存放的

7. C99中的变长数组

在C99标准之前,C语⾔在创建数组的时候,数组⼤⼩的指定只能使⽤常量、常量表达式,或者如果我们初始化数据的话,可以省略数组大小

比如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int arr1[10];
int arr2[3+5];
int arr3[] = {1,2,3};

这样的语法限制,让我们创建数组就不够灵活,有时候数组⼤了浪费空间,有时候数组⼜⼩了不够用的

C99中给⼀个变⻓数组(VLA)的新特性,允许我们可以使⽤变量指定数组大小,如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int n = a+b;
int arr[n];

数组 arr 就是变长数组,它的长度取决于变量 n 的值编译器无法事先确定,只有运行时才能知道n是多少

变长数组的根本特征,就是数组长度只有运行时才能确定,所以变长数组不能初始化

完结撒花~

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-02-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 数组的概念
  • 2. ⼀维数组的创建和初始化
    • 2.1 数组创建
    • 2.2 数组的初始化
    • 2.3 数组的类型
  • 3. ⼀维数组的使用
    • 3.1 数组下标的访问
  • 4. ⼀维数组在内存中的存储
  • 5. ⼆维数组的概念
    • 5.1 ⼆维数组的创建
    • 5.2 ⼆维数组的初始化
  • 6. ⼆维数组的使用
    • 6.1 ⼆维数组的下标
    • 6.2 二维数组的存储
  • 7. C99中的变长数组
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档