C 语言数组教程:定义、访问、修改、循环遍历及多维数组解析
C 数组
数组用于将多个值存储在单个变量中,而不是为每个值声明单独的变量。
要创建数组,请定义数据类型(例如 int)并指定数组名称,后面跟着方括号 []。
要将值插入其中,请使用逗号分隔的列表,并在花括号内使用:
int myNumbers[] = {25, 50, 75, 100};
现在我们已经创建了一个变量,其中包含一个包含四个整数的数组。
访问数组元素
要访问数组元素,请参阅其索引号。
数组索引从 0 开始:[0] 是第一个元素。 [1] 是第二个元素,等等。
以下语句访问 myNumbers 中第一个元素 [0] 的值:
printf("%d", myNumbers[0]);
// 输出 25
更改数组元素
要更改特定元素的值,请参阅索引号:
myNumbers[0] = 33;
循环遍历数组
您可以使用 for 循环遍历数组元素。
以下示例输出 myNumbers 数组中的所有元素:
int myNumbers[] = {25, 50, 75, 100};
int i;
for (i = 0; i < 4; i++) {
printf("%d\n", myNumbers[i]);
}
设置数组大小
另一种常见的方法是创建数组,指定数组的大小,然后添加元素:
// 声明一个包含四个整数的数组:
int myNumbers[4];
// 添加元素
myNumbers[0] = 25;
myNumbers[1] = 50;
myNumbers[2] = 75;
myNumbers[3] = 100;
使用这种方法,您应该事先知道数组元素的数量,以便程序存储足够的内存。
创建数组后,您无法更改数组的大小。
获取数组大小或长度
要获取数组的大小,可以使用 sizeof 运算符:
int myNumbers[] = {10, 25, 50, 75, 100};
printf("%lu", sizeof(myNumbers)); // 打印 20
为什么结果显示 20 而不是 5,当数组包含 5 个元素时?
- 这是因为
sizeof运算符返回类型的大小(以字节为单位)。
一个 int 类型通常是 4 个字节,因此从上面的示例中,4 x 5(4 字节 x 5 个元素)= 20 字节。
当您使用需要良好内存管理的大型程序时,了解数组的内存大小非常有用。
但是,当您只想找出数组有多少个元素时,可以使用以下公式(将数组的大小除以一个数组元素的大小):
int myNumbers[] = {10, 25, 50, 75, 100};
int length = sizeof(myNumbers) / sizeof(myNumbers[0]);
printf("%d", length); // 打印 5
改进循环
在上面的数组循环部分,我们在循环条件 (i < 4) 中写了数组的大小。这并不理想,因为它只适用于特定大小的数组。
但是,通过使用上面示例中的 sizeof 公式,我们现在可以编写适用于任何大小数组的循环,这更可持续。
而不是写:
int myNumbers[] = {25, 50, 75, 100};
int i;
for (i = 0; i < 4; i++) {
printf("%d\n", myNumbers[i]);
}
最好写:
int myNumbers[] = {25, 50, 75, 100};
int length = sizeof(myNumbers) / sizeof(myNumbers[0]);
int i;
for (i = 0; i < length; i++) {
printf("%d\n", myNumbers[i]);
}
C 多维数组
数组,也称为单维数组。这些非常棒,是您在 C 语言编程中会经常使用的东西。然而,如果您想要将数据存储为表格形式,例如带有行和列的表格,则需要熟悉多维数组。
多维数组本质上是数组的数组。
数组可以具有任何数量的维度。我将介绍最常见的一种;二维数组 (2D)。
二维数组
二维数组也称为矩阵(带行列的表格)。
要创建整数的二维数组,请看以下示例:
int matrix[2][3] = { {1, 4, 2}, {3, 6, 8} };
第一个维度表示行数 [2],而第二个维度表示列数 [3]。值按行顺序放置,可以这样可视化:
| 1 | 4 | 2 |
|---|---|---|
| 3 | 6 | 8 |
访问二维数组的元素
要访问二维数组的元素,您必须指定行和列的索引号。
以下语句访问 matrix 数组第一行 (0) 和第三列 (2) 中元素的值。
int matrix[2][3] = { {1, 4, 2}, {3, 6, 8} };
printf("%d", matrix[0][2]); // 输出 2
请记住:
- 数组索引从 0 开始: [0] 是第一个元素。 [1] 是第二个元素,等等。
更改二维数组中的元素
要更改元素的值,请参考每个维度的元素索引号:
以下示例将更改第一行 (0) 和第一列 (0) 中元素的值:
int matrix[2][3] = { {1, 4, 2}, {3, 6, 8} };
matrix[0][0] = 9;
printf("%d", matrix[0][0]); // 现在输出 9 而不是 1
循环遍历二维数组
要循环遍历多维数组,您需要为数组的每个维度设置一个循环。
以下示例输出 matrix 数组中的所有元素:
int matrix[2][3] = { {1, 4, 2}, {3, 6, 8} };
int i, j;
for (i = 0; i < 2; i++) {
for (j = 0; j < 3; j++) {
printf("%d\n", matrix[i][j]);
}
}
最后
为了方便其他设备和平台的小伙伴观看往期文章:
微信公众号搜索:Let us Coding,关注后即可获取最新文章推送
看完如果觉得有帮助,欢迎 点赞、收藏、关注
C 语言数组教程:定义、访问、修改、循环遍历及多维数组解析的更多相关文章
- linux shell 中数组的定义和for循环遍历的方法
linux 中定义一个数据的语法为: variable=(arg1 arg2 arg3 ....) 中间用空格分开.数组的下标从0开始. 1 获取下标为n的元素: variable[n] 而且不存在数 ...
- 功能要求:定义一个两行三列的二维数组 names 并赋值,使用二重循环输出二维数组中的元素。
功能要求:定义一个两行三列的二维数组 names 并赋值,使用二重循环输出二维数组中的元素 names={{"tom","jack","mike&qu ...
- 三重for循环实现对二维数组的按列排序(JavaScript)
由C语言联想到的:三重for循环实现对二维数组的按列排序,并且牵扯到数据结构. 自己写的,水平有限,本文属于原创,可能存在错误,忘指正~ function circle() { var a = [ [ ...
- 【c语言】二维数组中的查找,杨氏矩阵在一个二维数组中,每行都依照从左到右的递增的顺序排序,输入这种一个数组和一个数,推断数组中是否包括这个数
// 二维数组中的查找,杨氏矩阵在一个二维数组中.每行都依照从左到右的递增的顺序排序. // 每列都依照从上到下递增的顺序排序.请完毕一个函数,输入这种一个数组和一个数.推断数组中是否包括这个数 #i ...
- 【面试题003】c数组做为参数退化的问题,二维数组中的查找
[面试题003]c数组做为参数退化的问题,二维数组中的查找 一,c数组做为参数退化的问题 1.c/c++没有记录数组的大小,因此用指针访问数组中的元素的时候,我们要确保没有超过数组的边界, 通过下面 ...
- 二维数组过滤,根据多个条件获取二维数组中指定的arr
/** * 二维数组过滤,根据多个条件获取二维数组中指定的arr * @param $data_arr * @param $lm_number * @param $source_type * @par ...
- Go语言入门教程系列——函数、循环与分支
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是Golang专题的第四篇,这一篇文章将会介绍golang当中的函数.循环以及选择判断的具体用法. 函数 在之前的文章当中其实我们已经接 ...
- C语言数组篇(五)多级指针和二维数组指针的区别
多级指针 以二级指针为例 二级指针的由来是 指针数组 的指针形式. int *p[10] 读取的顺序是 p[] --> 10个空间的数组 * p[] --> 这10个空间的数组里面存放 ...
- 计算机二级-C语言-对标志位的巧妙使用。对二维数组数据进行处理。对文件进行数据输入。
//函数fun的功能是:计算形参x所指数组中平均值(规定所有数均为正数),将所指数组中大于平均值的数据移至数组的前部,小于等于的移至后部,平均值作为返回值,在主函数中输出平均值和后移的数据. //重难 ...
- 数组属性的习题、Arrays工具、二维数组
一.数组的练习 1.声明一个char类型的数组, 从键盘录入6个字符: [1]遍历输出 [2]排序 [3]把char数组转化成一个逆序的数组. import java.util.Scanner; pu ...
随机推荐
- 学会了MySql高级查询让你在工作中游刃有余
一.单元概述 通过本章的学习能够理解MySQL数据库中分组查询的含义,掌握常用分组函数的使用,掌握GROUP BY子句的使用规则,掌握分组后数据结果的条件过滤,掌握SELECT语句执行过程,理解子查询 ...
- 【Azure 应用服务】Azure Function App Linux环境下的Python Function,安装 psycopg2 模块错误
问题描述 在Azure中创建Function App(函数应用), 用以运行Python代码(Python Version 3.7). 通过VS Code创建一个HttpTrigger的Functio ...
- 《Document-level Relation Extraction as Semantic Segmentation》论文阅读笔记
原文 代码 摘要 本文研究的是文档级关系抽取,即从文档中抽取出多个实体之间的关系.现有的方法主要是基于图或基于Transformer的模型,它们只考虑实体自身的信息,而忽略了关系三元组之间的全局信息. ...
- 修改 markdown 二级标题的编号 - 自动编号 autoNumber.js nodejs
需求 我在写 https://www.vuejsdev.com/01FE/must-know-knowledge.html 这个页面的时候, 二级页面 标题前面有编号,但是有时候我会把顺序换下,每次手 ...
- iView 表单验证 如果prop字段和表单里的字段对不上,会触发校验,提示错误信息
iView 表单验证 如果prop字段和表单里的字段对不上,会触发校验,提示错误信息 原因: 在某些情况,没有id,只有文本的时候,需要返显文本,直接用input显示文本,就会出现,触发数据校验的问题 ...
- c++的IO类
CPP的IO类 继承图: IO对象不能拷贝或赋值 istream in = cin; //错! istream &in = cin; //正确! IO对象的状态 strm::good:读正常 ...
- 记一个很好用的轻量级翻译软件 copytranslator
软件下载主页: https://gitee.com/ylzheng/CopyTranslator/wikis/windows 可以设置始终置顶,监听剪切板,翻译起来非常方便
- 大年学习linux(第六节---软件安装)
六.软件安装 rpm RPM软件包的管理工具 补充说明 rpm命令 是RPM软件包的管理工具.rpm原本是Red Hat Linux发行版专门用来管理Linux各项套件的程序,由于它遵循GPL规则且功 ...
- 喜报|3DCAT成为国内首批适配Vision Pro内容开发者
近日,苹果在上海总部举办了国内首场 Apple Vision Pro 开发者实验室活动,3DCAT作为国内领先的实时渲染云平台参与了此次活动,成为国内首批适配 Vision Pro 的内容开发者之一. ...
- 专访虚拟人科技:如何利用 3DCAT 实时云渲染打造元宇宙空间
自古以来,人们对理想世界的探索从未停止,而最近元宇宙的热潮加速了这一步伐,带来了许多新的应用.作为元宇宙的关键入口,虚拟现实(VR)将成为连接虚拟和现实的桥梁.苹果发布的VISION PRO头戴设备将 ...