Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
C语言——D/数组
数组是⼀组相同类型元素的集合; • 数组中存放的是1个或者多个数据,但是数组元素个数不能为0; • 数组中存放的多个数据,类型是相同的。 数组分为⼀维数组和多维数组,多维数组⼀般⽐较多见的是⼆维数组。
用户11015888
2024/03/11
2030
C语言——D/数组
c语言从入门到实战——数组
C语言数组是一种用来存储相同类型元素的数据结构,它由一组连续内存空间组成,并且每个元素的大小相同。这些数据按照一个固定的顺序排列。数组可以有一个或多个维度,每个维度的大小必须是正整数。
鲜于言悠
2024/03/20
6240
c语言从入门到实战——数组
【C语言篇】从零带你全面了解数组(超详细)
存放在数组的值被称为数组的元素,数组在创建的时候可以指定数组的⼤⼩和数组的元素类型。
半截诗
2024/10/09
3740
【C语言篇】从零带你全面了解数组(超详细)
C语言数组基础知识详解---一维数组,二维数组,数组访问,二分查找
存放在数组的值被称为数组的元素,数组在创建的时候可以指定数组的大小和数组的元素类型。 type 指定的是数组中存放数据的类型,可以是:char、short、int、float 等,也可以是自定义的类型。 arr_name 指的是数组名的名字,这个名字根据实际情况,起的有意义就行。 []中的常量值是用来指定数组的大小的,这个数组的大小是根据实际的需求指定就行。
fhvyxyci
2024/09/24
4260
C语言数组基础知识详解---一维数组,二维数组,数组访问,二分查找
C语言数组
风中的云彩
2024/11/07
5870
C语言数组
【C生万物】数组
存放在数组的值被称为数组元素,数组在创建的时候可以指定数组的大小和数组的元素类型。
爱敲代码的小杨.
2024/05/07
1270
【C生万物】数组
数组知识点总结
c99标准之前数组的大小只能是常量指定,不能使用变量 c99之后为什么就使用变量呢?---变长数组 变长数组:数组大小可以根据输入的变量决定其大小的数组--如下 int n; scanf("%d",&n);  int array[n];
ImAileen
2024/01/18
1510
数组知识点总结
数组(1)
对于数组的使用我们之前介绍了一个操作符: [] (下标引用操作符),它其实就是数组访问的操作符。
waves浪游
2024/01/22
1880
数组(1)
抽丝剥茧C语言(中阶)数组
本章会详细的讲解数组,以前因为数组的困惑会迎刃而解。 数组的作用是储存大量元素,不用不停的创建变量。
有礼貌的灰绅士
2023/03/28
6260
抽丝剥茧C语言(中阶)数组
如何深入掌握C语言数组(详解)
1、数组必须 先定义,后使用 2、只能逐个引用数组元素,不能一次引用整个数组 3、数组元素表示形式:  数组名[下标]  , 下标可以是常量或整型表达式
用户9645905
2022/11/30
1.1K0
如何深入掌握C语言数组(详解)
【C语言】一维数组和二维数组
type_t arr_name [const_n] type_t-----数组元素类型 arr_name-----数组名 [const_n]----- 是一个常量表达式,用来指定数组大小
YoungMLet
2024/03/01
2930
一篇文章带你完全理解C语言数组
注意:数组创建,在c99标准之前,数组初始化[]中要给一个常量才可以,不能使用变量。在c99标准支持了变长数组的概念。 但是vs2022不支持c99变长数组、变长数组是不能初始化的。
Yui_
2024/10/16
1090
一篇文章带你完全理解C语言数组
c语言数组介绍
数组的初始化是指,在创建数组的同时给数组的内容一些合理初始值(初始化)。 看代码:
全栈程序员站长
2022/09/08
2.4K0
c语言数组介绍
【C语言】一维数组(含数组二分查找)
    数组也是有类型的,数组算是⼀种⾃定义类型,去掉数组名留下的就是数组的类型,比如:
TANGLONG
2024/10/15
1800
【C语言】一维数组(含数组二分查找)
c语言进阶指南(1)(数组)
从这里开始,我们会经常分析代码在内存中的分布形式,正所谓新手看代码,高手看内存。这也是我将这个专栏划分为进阶篇的原因,从这里开始,我们将会经常在内存层面分析代码的作用。
代码小豪
2024/06/05
2570
一维数组与二维数组———详细解读及一些注意事项
这里注意一点,在C99标准里有变长数组的概念,所谓变长数组并不是指数组会变长,而是指用整型变量或表达式声明或定义的数组。如下所示:
诺诺的包包
2023/02/17
6200
一维数组与二维数组———详细解读及一些注意事项
C:指针和数组之间的关系-学习笔记
指针这个模块更新的比较慢,主要是小编还得学习指针的知识点,虽然说是学习笔记,但是也是需要小编自己学会后才能够更好的将知识点介绍给大家,所以还请见谅一下哈!!!
LonlyMay
2024/10/21
1140
C:指针和数组之间的关系-学习笔记
相关推荐
C语言——D/数组
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验