訪問數組元素(四十四)

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.pswp.cn/diannao/76917.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/76917.shtml
英文地址,請注明出處:http://en.pswp.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;最小集合覆蓋問題…