二維數組 和 變長數組

在上一期的內容中,為諸君講解到了一維數組,在一維數組的基礎上,C語言中還有著多維數組,其中,比較典型且運用較為廣泛的就是我們今天的主角——二維數組

一 . 二維數組的概念

我們把單個或者多個元素組成的數組定義為一維數組。由此推演,我們可得:一維數組作為數組的元素,這就是我們的二維數組;把二維數組作為數組的元素,這就是我們的三維數組......

二維數組以上的數組我們就將其稱為多維數組

二 . 二維數組的創建

二維數組相較于一維數組,在表達形式上其實沒有太大的變化,多了一個括號而已嘛,其實質也就是多了一個縱列,話不多說,咱們直接上圖理解:

三 . 二維數組的初始化

初始化這個概念,跟諸君都是老朋友了昂,我們每當介紹到一個變量的時候,都會講到其初始化,所以,二維數組也不例外,二維數組的初始化格式跟一維數組相差無幾,只是略有差異而已

(1)二維數組的完全初始化

關于二維數組可以省略“ 行 ”但不能省略“ 列 ”:諸君都是聰明人,大家在腦袋里面推演一下就能相同了,當我們拿到一串數字,雖然我們不知道它有幾行,但我們知道了“ 列 ”數,我們自然是可以大致的將二維數組的表格羅列出來;但我們只知道“ 行 ”,不知道“ 列 ”卻辦不到

這種完全初始化的二維數組在其內部的表現形式為:

(2)二維數組的不完全初始化

這兩個二維數組在其內部的表現形式為:

(3)按照“ 行 ”初始化

?這種按照“ 行 ”初始化的二維數組在其內部的表現形式為:

四 . 二維數組的下標

二維數組跟一維數組的下標格式一樣,如上圖所示,僅僅只是多了個縱列而已,由上至下從0開始的遞增變化,大家可以簡單地將其理解為我們數學當中的坐標,只是這個特殊的坐標是從左上角開始,數值是由0開始

如上圖,當我們想要找到三行二列的存放的數時,我們只需要輸出 arr [2] [1] 即可,當然,由于這是一個整形數組,我們存放的也是整數,所以我們依舊用“ %d ”打印,如:

五 . 二維數組的輸入與輸出

這幾個字看似陌生,其實都是天天打交道的老朋友啦,你不信?那我就來為諸君逐字分析:

提到輸入,諸君是不是應該第一時間想到 scanf 函數

提到輸出,諸君是不是應該第一時間想到 printf?函數

這就只剩下了我們的二維數組了,且我們的二維數組是不是有多個元素?這就需要我們去“ 遍歷 ”的輸入與輸出,遍歷這個詞兒大家能get到吧?大家可以理解為通過循環的方式一個一個去接觸,所以我們會選擇用 for 循環去遍歷輸入與輸出每個元素

這樣子看來,二維數組的輸入與輸出是不是諸君最熟悉的陌生人呢?

那么話不多說,咱們就直接上圖了昂:

六 . 二維數組在內存中的儲存

大聲的告訴我,我們想要探究一個東西在計算機的內存中的儲存方式,我們該怎么做?

打印地址嘛,地址一打印出來,一瞧,這不比看干巴巴的文字有用,上圖!

(1)這是x64環境下,也就是64位

(2)這是x86環境下,也就是32位

之前提到過,計算機中地址都是以十六進制數儲存的

所以由此觀之:不管是在x64還是在x86環境下,只要是整型,每個地址之間都相差4個字節。且我們也可以得出,二維數組中的每個元素也是連續存放

七 . 變長數組

在C99標準之前,C語言在創建數組的時候,數組大小的指定只能使用常量、常量表達式。這樣的語法限制呢,就讓人在寫代碼的時候很不方便,使得我們創建數組不夠靈活,數組大了浪費空間,數組小了又會越界,造成bug,很不爽對吧

當然了,這些小問題,諸君不必多慮昂,有限制就必定有突破嘛,在C99當中就改革創新了,給了我們一個變長數組(variable-length array,簡稱 VLA)的新特性,這就使得我們可以運用變量來創建數組,如下圖所示的形式:

變長數組的長度取決于變量 “ n ”的值,編譯器沒辦法事先預知,只有當我們的程序在運行時,才能知道這個“ n ”是多少,我們才能確定數組長度。因此,變長數組是不能初始化的。這個點應該很好理解昂,大家想一想嘛,初始化不就是為了給數組提供元素數據嘛,你這一輸入,數組里的長度不就定死了嘛,那還咋變長啊是吧

它的好處是:程序員不必在開發時,隨意為數組指定一個估計的長度, 程序會在運行時為數組分配
精確的長度
但它有一個比較迷惑的點:變長數組的意思是 數組的大小是可以使用變量來指定的,在程序運行的
時候,根據變量的大小來指定數組的元素個數 ,而不是說數組的大小是可變的。 數組的大小一旦確
定就不能再變化了(天王老子來了不行!)

但是呢,很遺憾昂,在我們使用的VS2022版本上,雖然支持絕大部分的C99語法,但恰巧就沒有

這個變長數組。當然,有gcc編譯器的小伙伴們可以去試一試,我就不試了,我只有VS2022,大

家了解到這個變長數組的概念就好?

OKK,有關數組的知識點這是這兩期的內容了,一維數組、二維數組、變長數組等等。數組的內容還是很重要的,因為它跟我們C語言中的一大攔路虎——指針,也就是我們俗稱的“ 地址 ”息息相關,所以還望諸君一定引起重視。鄙人這兩天就被指針搞得焦頭爛額,唉,難搞喲,革命尚未成功,同志仍需努力!多的不嘮了,加油加油,咱們也下期再見,與諸君共勉!!!?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/11117.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/11117.shtml
英文地址,請注明出處:http://en.pswp.cn/web/11117.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

VScode 修改 Markdown Preview Enhanced 主題與字體

VScode 修改 Markdown Preview Enhanced 主題與字體 1. 修改前后效果對比2. 修改主題2.1 更改默認主題2.2 修改背景色 3. 修改字體 VS Code基礎入門使用可查看: VS Code 基礎入門使用(配置)教程 其他Vs Code 配置可關注查看: Vs C…

2024年如何選什么版本FL Studio才適合自己編曲?

fl studio是什么軟件 水果編曲軟件 FL Studio,全稱為Fruity Loops Studio,是一款全能音樂制作環境或數字音頻工作站(DAW),集編曲、錄音、剪輯、混音等多種功能于一身。 FL Studio最初名為Fruity Loops,因…

外網如何訪問內網?快解析

由于公網IP資源短缺,我們的電腦大多處于內網環境,如何在外網訪問內網電腦,成為一個令人頭疼的問題,下面我給大家推薦一個非常實用的方法。 1:訪問快解析下載安裝快解析服務器 2:運行軟件,點擊“…

2.4 輸入和顯示

本節必須掌握的知識點: 示例五源代碼 代碼分析 匯編解析 2.4.1 示例五 ■格式化輸入函數scanf scanf函數可以從鍵盤讀取輸入的信息。scanf函數同樣可以像printf函數那樣,通過轉換說明“%d”來限制函數只能讀取十進制數。scanf函數的參數為可變參數…

【算法訓練 day25 修剪二叉搜索樹、將有序數組轉化為二叉搜索樹、把二叉樹搜索轉化為累加樹】

目錄 一、修剪二叉搜索樹-LeetCode 669思路實現代碼個人代碼視頻鏈接代碼 個人問題 二、將有序數組轉化為二叉搜索樹-LeetCode 108思路實現代碼個人問題 三.把二叉樹搜索轉化為累加樹-LeeCode 538思路實現代碼個人問題 一、修剪二叉搜索樹-LeetCode 669 Leecode鏈接: leetcode…

項目管理-計算題公式【復習】2/2

2.【成本】相關公式 2.1掙值分析 三個參數 (1)計劃價值(PV,Plan Value): PV:計劃工作分配的經批準的預算,是為完成某活動或 WBS 組成部分而準備的一份經批準的預算。不包括管理儲備。 注意:按照計劃截止目…

LwIP 之九 詳解 UDP RAW 編程、示例、API 源碼、數據流

我們最為熟知的網絡通信程序接口應該是 Socket。LwIP 自然也提供了 Socket 編程接口,不過,LwIP 的 Socket 編程接口都是使用最底層的接口來實現的。我們這里要學習的 UDP RAW 編程則是指的直接使用 LwIP 的最底層 UDP 接口來直接實現應用層功能。這里先來一張圖,對 LwIP 內部…

React 和 Vue兩個流行的前端 JavaScript 框架有什么區別?

設計理念: React 是由 Facebook 開發的,專注于構建 UI 組件。它采用了一種聲明式的、組件化的開發模式,通過使用虛擬 DOM 來實現高效的 UI 更新。 Vue 是由尤雨溪開發的,旨在提供一個靈活且易于上手的框架。Vue 也支持組件化開發…

電商技術揭秘營銷相關系列文章合集(4)

相關系列文章 電商技術揭秘相關系列文章合集(1) 電商技術揭秘相關系列文章合集(2) 電商技術揭秘相關系列文章合集(3) 文章目錄 引言集合說明集合文章列表 引言 在數字化浪潮的推動下,電商行…

【35分鐘掌握金融風控策略25】定額策略實戰2

目錄 基于收入和負債的定額策略 確定托底額度和蓋帽額度 確定基礎額度 基于客戶風險評級確定風險系數 計算最終授信額度 確定授信有效期 基于收入和負債的定額策略 在實際生產中,客戶的收入和負債數據大多無法直接獲得,對于個人的收入和負債數據&…

【JavaEE】Spring Boot 入門:快速構建你的第一個 Spring Boot 應用

目錄 第一個SpringBoot程序介紹項目創建創建項目目錄介紹輸出Hello World 第一個SpringBoot程序 介紹 在學習SpringBoot之前, 我們先來認識?下Spring 我們看下Spring官?(https://spring.io/)的介紹 可以看到, Spring讓Java程序更加快速, 簡單和安全. Spring對于速度、簡單…

【論文閱讀筆記】MapReduce: Simplified Data Processing on Large Clusters

文章目錄 1 概念2 編程模型3 實現3.1 MapReduce執行流程3.2 master數據結構3.3 容錯機制3.3.1 worker故障3.3.2 master故障3.3.3 出現故障時的語義 3.4 存儲位置3.5 任務粒度3.6 備用任務 4 擴展技巧4.1 分區函數4.2 順序保證4.3 Combiner函數4.4 輸入和輸出的類型4.5 副作用4.…

用balenaEtcher燒錄ubuntu的iso文件都失敗,所以選用了另一種燒錄的軟件Rufus,然后燒錄成功了+安裝ubuntu的坑

https://releases.ubuntu.com/bionic/進入網頁下載ubuntu 選擇燒錄軟件將下載的Ubuntu燒錄到U盤中 之前用這個U盤燒錄過一次,成功了,后來應該是U盤受損或者是什么其他原因使得用這個U盤總是燒錄失敗 換思路:由于一直使用balenaEtcher燒錄ubu…

3 ESP32的PWM控制

Esp32的PWM控制也配置庫函數,以下就是PWM所用到的函數 1 PWM通道初始化設置 函數原型uint32_t ledcSetup(uint8_t chan, uint32_t freq, uint8_t bit_num)函數功能設定指定LEDC通道的PWM信號頻率和占空比分辨率返回值通道PWM信號的頻率參數說明chan(LE…

WebView基礎知識以及Androidx-WebKit的使用

文章目錄 摘要WebView基礎一、啟動調整模式二、WebChromeClient三、WebViewClient四、WebSettings五、WebView和Native交互 Androidx-WebKit一、啟動安全瀏覽服務二、設置代理三、安全的 WebView 和 Native 通信支持四、文件傳遞五、深色主題的支持六、JavaScript and WebAssem…

ipa 功能包調試,分區算法,覆蓋算法測試

參考 wiki 流網絡 flow network 解釋 相關文章 ipa 分區算法 ipa 分區算法總結,部分算法圖解 環境 ubuntu20,ros 版本 noetic 運行測試 按照 readme 提示進行測試,跳過第一個步驟,并不需要 turtlebot3。 執行第三個 launch 報…

vue element checkbox的實現

實現多選非常簡單: 手動添加一個el-table-column,設type屬性為selection即可;默認情況下若內容過多會折行顯示,若需要單行顯示可以使用show-overflow-tooltip屬性,它接受一個Boolean,為true時多余的內容會在 hover 時以…

Java8 快速實現List轉map 、分組、過濾等操作

Java 8 是 Java 編程語言的一個重要版本,它引入了許多新特性和改進,使得 Java 開發變得更加高效和現代。 下面我們就來使用Java8 快速實現List轉map 、分組、過濾等操作。 定義1個用戶對象 public class User {private Integer id;private String nam…

計算機通信

一.進程和線程的區別? 1. 進程是資源分配的最小單位, 線程是cpu進行調度的最小單位。 2. 一個進程可以看做一個運行的程序, 一個進程中可以包含多個線程, 線程在進程內執行。 3. 多進程是指操作系統能同時運行多個任務(程序),多線程是指在同…

數據挖掘原理與應用------分類預測

在數據挖掘和機器學習領域,TPR(True Positive Rate)是指在實際為陽性的情況下,模型正確預測為陽性的比例。TPR也被稱為靈敏度(Sensitivity)或召回率(Recall)。它是評估分類模型性能的…