访问数组元素(四十四)

1. 数组下标与类型

数组的索引从 0 开始。例如,一个包含 10 个元素的数组,其合法下标范围为 0 到 9,而不是 1 到 10。为了表示下标,通常使用 size_t 类型,它是一种与机器相关的无符号整型,足够大以存放内存中任意对象的大小。size_t 定义在头文件 <cstddef> 中。

示例代码:

#include <iostream>
#include <cstddef>  // 定义 size_t
using std::cout;
using std::endl;int main() {int arr[10];  // 定义一个含有10个元素的数组// 输出数组的合法索引范围for (size_t i = 0; i < 10; ++i)cout << "Index " << i << endl;return 0;
}

2. 使用下标运算符访问数组元素

数组的元素可以通过下标运算符 [] 直接访问。例如:

#include <iostream>
using std::cout;
using std::endl;int main() {int scores[11] = {};  // 定义一个含有11个无符号整型元素的数组,并将所有元素初始化为0// 例如,用于统计分数段:0~9, 10~19, …, 90~99, 100unsigned grade;while (std::cin >> grade) {if (grade <= 100)++scores[grade / 10];  // 计算分数段下标,并将对应计数值加1}// 输出所有计数值for (auto cnt : scores)cout << cnt << " ";cout << endl;return 0;
}

在上述代码中,scores 数组用于统计不同分数段的成绩个数。例如,若输入的成绩为 42,则 42/10 得 4,于是将 scores[4] 加1。注意:数组的下标操作直接由 C++ 语言提供,程序员必须保证下标合法,否则将导致未定义行为。

3. 使用范围 for 语句遍历数组

与 vector 和 string 类似,遍历数组最简洁的方法是使用范围 for 语句。由于数组的大小是类型的一部分,编译器知道数组中包含多少个元素,因此可以自动遍历所有元素:

#include <iostream>
using std::cout;
using std::endl;int main() {int scores[11] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};// 使用范围 for 遍历数组for (auto count : scores)cout << count << " ";cout << endl;return 0;
}

这个循环会依次输出数组中每个元素的值。

4. 检查下标的合法性

下标访问是数组操作中最常见的方法,但使用时必须保证下标在合法范围内。下标必须大于或等于 0 且小于数组大小。如果使用了越界的下标,编译器不会报错,但运行时会产生不可预测的行为,严重时会导致缓冲区溢出等安全问题。

例如:

#include <iostream>
using std::cout;
using std::endl;int main() {int arr[10] = {0};// 错误示例:访问 arr[10] 超出范围(合法索引是 0 到 9)// cout << arr[10] << endl;  // 未定义行为return 0;
}

因此,访问数组元素时一定要确保下标正确,必要时可将下标作为 size_t 类型,并在逻辑上严格检查。

5. 小结

  • 数组下标:数组索引从 0 开始,一个包含 n 个元素的数组的合法下标范围为 0 到 n-1。
  • size_t 类型:建议使用 size_t 表示数组索引,因为它是无符号类型且足够大,定义在 <cstddef> 中。
  • 下标运算符:使用 [] 可直接访问数组中已存在的元素;请确保下标在合法范围内,防止未定义行为。
  • 范围 for 语句:可以用范围 for 语句遍历数组,编译器根据数组大小自动处理,不必人工控制循环计数。
  • 检查下标:程序员必须负责检查下标是否合法,避免数组越界导致安全问题。

通过正确地访问数组中的元素,你可以高效地操作固定大小的容器,同时在代码中明确保证下标安全,避免缓冲区溢出等严重错误。

参考资料

  • cppreference.com 关于内置数组和 size_t 的详细说明
  • 各大 C++ 编码规范(如 Google C++ Style Guide)中对数组访问的建议

希望这篇文章能帮助你全面了解数组元素的访问方式和注意事项,从而在实际编程中更安全、有效地使用数组。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/76917.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机网络 3-1 数据链路层(功能+组帧+差错控制)

【考纲内容】 &#xff08;一&#xff09;数据链路层的功能 &#xff08;二&#xff09;组帧 &#xff08;三&#xff09;差错控制 检错编码&#xff1b;纠错编码 &#xff08;四&#xff09;流量控制与可靠传输机制 流量控制、可靠传输与滑动窗口机制&#xff1b;停止-等…

Django中使用不同种类缓存的完整案例

Django中使用不同种类缓存的完整案例 推荐超级课程: 本地离线DeepSeek AI方案部署实战教程【完全版】Docker快速入门到精通Kubernetes入门到大师通关课AWS云服务快速入门实战目录 Django中使用不同种类缓存的完整案例步骤1:设置Django项目步骤2:设置URL路由步骤3:视图级别…

Spring Boot 集成Redis 的Lua脚本详解

1. 对比Lua脚本方案与Redis自身事务 对比表格 对比维度Redis事务&#xff08;MULTI/EXEC&#xff09;Lua脚本方案原子性事务命令序列化执行&#xff0c;但中间可被其他命令打断&#xff0c;不保证原子性Lua脚本在Redis单线程中原子执行&#xff0c;不可中断计算能力仅支持Red…

【大模型】DeepSeek + 蓝耕MaaS平台 + 海螺AI生成高质量视频操作详解

目录 一、前言 二、蓝耘智能云MaaS平台介绍 2.1 蓝耘智算平台是什么 2.2 平台优势 2.3 平台核心能力 三、海螺AI视频介绍 3.1 海螺AI视频是什么 3.2 海螺AI视频主要功能 3.3 海螺AI视频应用场景 3.4 海螺AI视频核心优势 3.5 项目git地址 四、蓝耘MaaS平台DeepSeek海…

12-产品经理-维护模块

需求模块是帮助产品经理进行需求的分类和维护。 1. 维护模块 在具体产品的“研发需求”页面左侧&#xff0c;点击“维护模块”。也可以在具体产品的“设置”-“模块”下进行维护。 点击保存后&#xff0c;返回模块页面。还可以点击“子模块”对已有模块进行子模块的维护。 点击…

考研单词笔记 2025.04.06

area n领域&#xff0c;范围&#xff0c;方面&#xff0c;地区&#xff0c;地方&#xff0c;场地&#xff0c;面积 aspect n方面&#xff0c;层面&#xff0c;外表&#xff0c;外观 boundary n限度&#xff0c;界限&#xff0c;分界线&#xff0c;边界 cap n最高限额&#x…

护网蓝初面试题

《网安面试指南》https://mp.weixin.qq.com/s/RIVYDmxI9g_TgGrpbdDKtA?token1860256701&langzh_CN 5000篇网安资料库https://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247486065&idx2&snb30ade8200e842743339d428f414475e&chksmc0e4732df793fa3bf39…

玄机-apache日志分析

靶场任务 1、提交当天访问次数最多的IP&#xff0c;即黑客IP&#xff1a; 查看apache日志 apache访问日志的位置是&#xff1a;/var/log/apache2/access.log.1 匹配正则算法 首先先cat看看 发现地址都在第一行&#xff0c;直接匹配计算输出 cat access.log.1 |grep -Eo &…

C++ I/O 流通俗指南

1. std::ostream 是什么&#xff1f; 定义&#xff1a;std::ostream 是 C 标准库中的输出流类&#xff0c;负责将数据输出到各种目标&#xff08;如屏幕、文件、网络等&#xff09;。你可以把 std::ostream 想象成一根“数据水管”&#xff1a; 数据从 C 代码流进 std::ostrea…

Systemd 使用教程(二):Unit 的概念

目录 【二】 Systemd 单元&#xff08;Unit&#xff09;的概念 本教程将由浅入深的介绍 linux 中 Systemd 的知识和相关使用&#xff08;同时也方便自己后续查阅&#xff09; 【二】 Systemd 单元&#xff08;Unit&#xff09;的概念 虽然我想介绍的比较偏实际操作&#xff0…

树莓派PICO 设备烧录成cmsis dap

文章目录 1. 实际操作2. IO连接 1. 实际操作 2. IO连接

IntelliJ IDEA中Spring Boot 3.4.x+集成Redis 7.x:最新配置与实战指南

‌前言 Spring Boot 3.4.x作为当前‌最新稳定版本‌&#xff0c;全面支持Java 17与Jakarta EE 10规范。本文以‌Spring Boot 3.4.1‌和‌Redis 7.x‌为例&#xff0c;详解如何在IDEA中快速接入Redis&#xff0c;涵盖‌最新依赖配置‌、‌数据序列化优化‌、‌缓存注解‌及‌高…

VectorBT:使用PyTorch+Transformer训练和回测股票模型 进阶五

VectorBT&#xff1a;使用PyTorchTransformer训练和回测股票模型 进阶五 本方案基于PyTorch框架与Transformer模型&#xff0c;结合VectorBT回测引擎构建多股票量化交易系统&#xff0c;采用滑动窗口技术构建时序特征&#xff0c;通过自注意力机制捕捉市场规律预测收益率&#…

4.3-4.6学习总结 Java:Set系列集合+双列集合+Map

Set系列集合&#xff1a; 元素是唯一的。 HashSet&#xff1a; 哈希值&#xff1a; 如果没有重写hashcode方法和equals方法&#xff0c;那么哈希值是根据地址值计算的。 LinkedHashSet&#xff1a; TreeSet底层为红黑树。 红黑树&#xff1a;两个红色节点不能相连。 双列集合&…

unreal engine5开发仿鬼泣5的游戏,把敌人击飞到空中4连击

UE5系列文章目录 文章目录 UE5系列文章目录前言一、实现思路二、具体蓝图 前言 unreal engine5开发仿鬼泣5的游戏&#xff0c;把敌人击飞到空中4连击&#xff0c;先看下效果 一、实现思路 unreal engine5开发仿鬼泣5的游戏&#xff0c;把敌人击飞到空中4连击 在Unreal Engi…

功耗日志抓取需求

最近罗列了一些功耗分析需要的常见日志&#xff1a; 测试功耗前&#xff1a; adb shell dumpsys batterystats --reset adb shell dumpsys batterystats --enable full-wake-history 测试功耗后&#xff0c;使用脚本导出如下功耗日志&#xff1a; 脚本 chmod x collect_logs.s…

Java后端开发流程

Java后端开发流程 目录 开发流程概述具体实现步骤开发最佳实践项目结构示例代码示例常见问题与解决方案 开发流程概述 Java后端开发是一个系统化的过程&#xff0c;通常包括以下几个主要阶段&#xff1a; 1. 需求分析阶段 业务需求收集&#xff1a;与产品经理、业务方沟通…

Java项目之基于ssm的孩童收养信息管理(源码+文档)

项目简介 孩童收养信息管理实现了以下功能&#xff1a; 实现了用户在线选择试题并完成答题&#xff0c;在线查看考核分数。管理员管理字典管理、收养管理、收养信息更改记录管理、收养者配偶管理、送养管理、员工管理、管理员管理等功能。 &#x1f495;&#x1f495;作者&am…

查询条件与查询数据的ajax拼装

下面我将介绍如何使用 AJAX 动态拼装查询条件和获取查询数据&#xff0c;包括前端和后端的完整实现方案。 一、前端实现方案 1. 基础 HTML 结构 html 复制 <div class"query-container"><!-- 查询条件表单 --><form id"queryForm">…

【算法竞赛】状态压缩型背包问题经典应用(蓝桥杯2019A4分糖果)

在蓝桥杯中遇到的这道题&#xff0c;看上去比较普通&#xff0c;但其实蕴含了很巧妙的“状态压缩 背包”的思想&#xff0c;本文将从零到一&#xff0c;详细解析这个问题。 目录 一、题目 二、思路分析&#xff1a;状态压缩 最小覆盖 1. 本质&#xff1a;最小集合覆盖问题…