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 ...
随机推荐
- sql注入简单初
import requests,sys,time from PyQt5.QtWidgets import * from PyQt5.QtGui import QIcon from threading ...
- 使用原生 cookieStore 方法,让 Cookie 操作更简单
前言 对于前端来讲,我们在操作cookie时往往都是基于document.cookie,但它有一个缺点就是操作复杂,它并没有像localStorage那样提供一些get或set等方法供我们使用.对与c ...
- 【Azure 服务总线】查看Service Bus中消息多次发送的日志信息,消息是否被重复消费
问题描述 使用Service Bus,发现消息被重复消费.如果要查看某一条消息的具体消费情况,需要那些消息的属性呢? 问题解答 使用Azure Service Bus,当消费发送到服务端后,就会生产相 ...
- 玩转SpringBoot:SpringBoot的几种定时任务实现方式
引言 在现代软件开发中,定时任务是一种常见的需求,用于执行周期性的任务或在特定的时间点执行任务.这些任务可能涉及数据同步.数据备份.报表生成.缓存刷新等方面,对系统的稳定性和可靠性有着重要的影响.Sp ...
- Mac根目录下无法创建文件或目录
无法创建目录 最近小伙伴经常反馈Mac根目录下创建文件或目录一直失败,并且尝试了各种姿势. 常见错误如下: # 常见错误1, 直接创建目录 mkdir -p /test mkdir: /data: R ...
- IDE中使用Git提交代码报错:Push to origin/release-V2 was rejected
一.问题由来 当前项目开发好之后,已经正常稳定运行一两个月,在使用过程中基本上没在出现什么BUG.因此公司在讨论准备开发二期项目,自己 就在之前的基础之上,使用git创建了分支,一个分支release ...
- config.baseUrl.dev 变量 转移到 .env.local 中
config.baseUrl.dev 变量 转移到 .env.local 中 上下文 vue前端开发 问题 多人写代码的时候,会提交config.js里面的配置文件 解决方案 在根目录创建 .env. ...
- ContextMenuManager右键z 右键菜单
常用软件 下载 https://files.cnblogs.com/files/pengchenggang/ContextMenuManager右键z-右键菜单.rar?t=1664158084
- Windows 安装 Rust 并设置镜像加速
目录 下载rustup-init.exe(Rust安装工具) 使用镜像加速rustup安装 安装Rust 安装标准库源码 使用镜像加速cargo包下载 安装结果确认 更新.卸载和文档查看 参考文档 下 ...
- springboot使用pagehelper
自己写的用户系统项目需要加个分页,之前都是用现成的,或者使用在sql里面拼接分页查询,这次任务紧急想直接找个包实现吧,找了很多博客看了都不行啊,不知道为啥,最后还是找了之前maven使用的包才行,简单 ...