數組——初識數據結構

一維數組

數組的創建

數組是一種相同類型元素的集合

數組的創建方式

C99 中引入了變長數組的概念,變長數組支持數組的大小使用變量來指定

明顯這里的vs2019不支持變長數組

數組初始化和不完全初始化

第二個數組就是典型的不完全初始化,開辟了10個空間,只有第一個是1,剩下的就用0填充

這里的ch1和ch2看起來似乎一樣,但ch1只有 a b c, 后面的0是編譯器主動加上的;ch2是abc\0,\0的ASCII碼值也是0,所以后面也是6個0,但ch2本身就自帶了一個

這樣的代碼也是有問題的,這里只用了一個空字符串初始化,所以數組的長度是一個元素

一維數組的使用

一個數組初始化好后每個元素都有其下標,下標是從0開始的

一維數組在內存中的存儲

這里我們打印一下數組的每個元素的地址看看,%p是打印地址

我們發現每個相鄰的地址最后的數字就相差4,因為這是整形數組,而一個整型是4個字節

數組在內存重視連續存放的!

隨著數組下標的增長,地址也是由低到高變化的

數組開辟的空間也不宜太大

數組中的數據放在棧區

0和\0

二維數組

二維數組的創建

初始化

第一個參數是行數,第二個是列數

這個數組是怎么存放的呢?

其實是1234先把第一行放滿,5放在第二行,其余的位置都是0

還有另一種初始化方式

就是指定初始化位置

以及,對于二維數組,初始化時,可以省略行,不能省略列

二維數組的使用

我們嘗試一下一列一列打印

二維數組在內存中的存儲

試著打印一下地址看看

能發現他們似乎也是連續存放的

也能將它們理解為一個12元素的整型數組

數組越界

當我們訪問的空間超過數組申請的空間時,就造成了越界訪問

還有這樣

可能有人比較疑惑,為啥5會打印兩次呢?

第一次打印了5個,第二次還是從行的下標0位置處開始,5這個位置是數組第二行的第一個元素,所以還會被打印一次。

數組應用

冒泡排序

冒泡排序(Bubble Sort)是一種簡單直觀的排序算法

冒泡排序的核心思想是:

通過相鄰元素兩兩比較,把較大的元素“冒泡”到序列的一端,像水中的氣泡一樣逐步上升。

具體過程如下:

  • 從頭到尾依次比較相鄰兩個元素,如果前一個比后一個大,就交換它們;

  • 每完成一輪,最大的元素就被“冒泡”到了當前未排序部分的末尾;

  • 然后對剩下的部分重復這一過程,直到整個序列有序。

比如排序 [5, 2, 4, 3, 1],第一輪結束后變成 [2, 4, 3, 1, 5],最大值 5 被放到了最后。之后對 [2, 4, 3, 1] 再次進行“冒泡”,直到全部排好序。

設有一個長度為 n 的數組,共需進行最多 n-1 輪“冒泡”:

  • 第 1 輪:比較 n-1 次,把最大值移到末尾;

  • 第 2 輪:比較 n-2 次,把次大值移到倒數第二位;

  • n-1 輪:只需比較 1 次。

基本理念就是數組中的元素兩兩相比較,隨后判斷是否交換位置,最終的目的是排成一個升序或降序數組

或者函數的形式

#include<stdio.h>
void bubble_sort(int arr[10])
{//求數組的元素個數int sz = sizeof(arr) / sizeof(arr[10]);//冒泡排序的趟數int i = 0;for (i = 0; i < sz - 1; i++){//一趟冒泡排序int j = 0;for (j = 0; j < sz - 1 - i; j++){if (arr[j] > arr[j + 1]){int tmp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = tmp;}}}
}int main()
{int arr[10] = { 9,8,7,6,5,4,3,2,1,0 };int sz = sizeof(arr) / sizeof(arr[0]);//0 1 2 3 4 5 6 7 8 9//要對數組升序排序//冒泡排序bubble_sort(arr);//打印for (int i = 0; i < sz; i++){printf("%d ", arr[i]);}return 0;
}

但結果好像不對誒~

原來上面數組名傳參的時候傳遞的只是數組首元素的地址,形參就是指針變量來接收,并沒有把整個數組傳上去。(這叫做數組名的降級)

上面sz就是1了,所以數組才會沒變化

這時我們只需要在main函數里先把sz計算好,然后傳給排序函數就行

#include<stdio.h>
void bubble_sort(int arr[10],int sz)
{//冒泡排序的趟數int i = 0;for (i = 0; i < sz - 1; i++){//一趟冒泡排序int j = 0;for (j = 0; j < sz - 1 - i; j++){if (arr[j] > arr[j + 1]){int tmp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = tmp;}}}
}int main()
{int arr[10] = { 9,8,7,6,5,4,3,2,1,0 };int sz = sizeof(arr) / sizeof(arr[0]);//0 1 2 3 4 5 6 7 8 9//要對數組升序排序//冒泡排序bubble_sort(arr,sizeof(arr)/sizeof(arr[0]));//打印for (int i = 0; i < sz; i++){printf("%d ", arr[i]);}return 0;
}

看一下這段代碼

運行結果是兩邊都相等!

這里剛好也得出了

當p指向數組的第一個元素時,p+i就指向數組第i個元素

p里存放著數組首元素的地址,所以p和arr可以相互替換,下面這些效果也相等

還有加法交換律能得出的結論

前面講了數組名是數組首元素地址,但存在兩個例外

sizeof(數組名),數組名表示整個數組,計算的是整個數組的大小,單位是字節

&數組名,數組名表示整個數組,取出的是整個數組的地址

看看這個,前面兩個+1后跳過了一個整型元素,地址都是+4,而第三個+1后跳過了整個數組,地址變化了40個字節

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

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

相關文章

技術速遞|使用 Semantic Kernel 與 A2A 協議構建多智能體解決方案

作者&#xff1a;盧建暉 - 微軟高級云技術布道師 翻譯/排版&#xff1a;Alan Wang 在快速發展的 AI 應用開發領域&#xff0c;能夠協調多個智能體已成為構建復雜企業級解決方案的關鍵。雖然單個 AI 智能體擅長特定任務&#xff0c;但復雜的業務場景往往需要跨平臺、跨框架甚至跨…

前端跨域請求原理及實踐

在前端開發中&#xff0c;"跨域"是一個繞不開的話題。當我們的頁面嘗試從一個域名請求另一個域名的資源時&#xff0c;瀏覽器往往會拋出類似Access to fetch at xxx from origin xxx has been blocked by CORS policy的錯誤。下面將深入探討跨域請求的底層原理&#…

SpringBoot07-數據層的解決方案:SQL

一、內置數據源 1-1、【回顧】Druid數據源的配置 druid的兩種導入格式 1-2、springboot提供的3種內置數據源的配置 若是不配置Druid&#xff0c; springboot提供了3中默認的數據源配置&#xff0c;它們分別是&#xff1a; 1. HikariCP&#xff08;默認&#xff09; 從 Spring…

前端自動化埋點:頁面模塊級行為跟蹤與問題定位系統??的技術設計方案

一、核心設計目標??精細化監控??&#xff1a;定位到頁面中??單個模塊??的曝光、點擊等行為。??低侵入性??&#xff1a;業務代碼與埋點邏輯解耦&#xff0c;降低開發維護成本。??鏈路可追蹤??&#xff1a;串聯用戶從曝光到操作的完整行為路徑。??實時性??&a…

Node.js 與 Java 性能對比

一、核心架構與任務模型對比Node.js 單線程事件循環 非阻塞I/O 通過V8引擎執行JavaScript&#xff0c;采用事件驅動模型&#xff0c;所有I/O操作&#xff08;如網絡請求、文件讀寫&#xff09;均為非阻塞。單線程處理所有請求&#xff0c;但通過事件循環&#xff08;Event Loo…

Python3常見接口函數

Python3常見接口函數一、基礎內置函數 輸入輸出 print()&#xff1a;輸出內容input()&#xff1a;讀取用戶輸入 類型轉換 int()、float()、str()、bool()&#xff1a;基礎類型轉換list()、tuple()、set()、dict()&#xff1a;容器類型轉換bin()、hex()、oct()&#xff1a;進制轉…

《P4092 [HEOI2016/TJOI2016] 樹》

題目描述在 2016 年&#xff0c;佳媛姐姐剛剛學習了樹&#xff0c;非常開心。現在他想解決這樣一個問題&#xff1a;給定一顆有根樹&#xff0c;根為 1 &#xff0c;有以下兩種操作&#xff1a;標記操作&#xff1a;對某個結點打上標記。&#xff08;在最開始&#xff0c;只有結…

TCP頭部

TCP頭部字段詳解1. 源端口和目的端口&#xff08;各16位&#xff09;功能&#xff1a;標識發送和接收應用程序范圍&#xff1a;0-65535&#xff08;0-1023為知名端口&#xff09;技術細節&#xff1a;客戶端通常使用臨時端口&#xff08;1024-65535&#xff09;服務端使用固定端…

LinkedList與鏈表(單向)(Java實現)

引入鏈表結構&#xff1a;在ArrayList任意位置插入或者刪除元素時&#xff0c;就需要將后序元素整體往前或者往后 搬移&#xff0c;時間復雜度為O(n)&#xff0c;效率比較低&#xff0c;因此ArrayList不適合做任意位置插入和刪除比較多的場景。因此&#xff1a;java集合中又引入…

網絡--VLAN技術

目錄 VLAN實驗報告 一、實驗拓撲 二、實驗要求 三、實驗思路 1、實驗準備 2. VLAN 3. DHCP 自動分配 4、 全網可達驗證 四、實驗步驟 &#xff08;一&#xff09;交換機配置- VLAN 創建與接口劃分 &#xff08;二&#xff09;路由器配置&#xff08;R1&#xff0c…

網絡基礎17--設備虛擬化

一、傳統MSTPVRRP的不足傳統MSTPVRRP設計&#xff1a;規劃復雜&#xff1a;需要詳細規劃VRRP多實例的Master歸屬、MSTP的VLAN和生成樹實例歸屬&#xff0c;以及IP網段。收斂速度慢&#xff1a;故障恢復速度一般在秒級&#xff0c;VRRP收斂時間至少需要3秒&#xff0c;故障恢復速…

深入解析Hadoop資源隔離機制:Cgroups、容器限制與OOM Killer防御策略

Hadoop資源隔離機制概述在分布式計算環境中&#xff0c;資源隔離是保障多任務并行執行穩定性的關鍵技術。Hadoop作為主流的大數據處理框架&#xff0c;其資源管理能力直接影響集群的吞吐量和任務成功率。隨著YARN架構的引入&#xff0c;Hadoop實現了計算資源與存儲資源的解耦&a…

static 關鍵字的 特殊性

static 關鍵字的 “特殊性” 主要體現在其與類、對象的綁定關系&#xff0c;以及由此帶來的一些反常規規則&#xff0c;具體如下&#xff1a;生命周期與內存位置特殊靜態成員&#xff08;變量 / 方法&#xff09;隨類加載而創建&#xff0c;隨類卸載而銷毀&#xff0c;生命周期…

win10系統Apache以 FastCGI方式運行PHP

文件下載及官方網站 VC運行庫Latest下載頁:Latest supported Visual C Redistributable downloads | Microsoft Learnapache httpd官網:Welcome! - The Apache HTTP Server Project下載頁:Apache VS17 binaries and modules downloadphp官網:PHP: Hypertext Preprocessor下載頁…

MCP與企業數據集成:ERP、CRM、數據倉庫的統一接入

MCP與企業數據集成&#xff1a;ERP、CRM、數據倉庫的統一接入 &#x1f31f; Hello&#xff0c;我是摘星&#xff01; &#x1f308; 在彩虹般絢爛的技術棧中&#xff0c;我是那個永不停歇的色彩收集者。 &#x1f98b; 每一個優化都是我培育的花朵&#xff0c;每一個特性都是我…

【milvus檢索】milvus檢索召回率

Milvus中兩種核心查詢方式&#xff1a;暴力搜索&#xff08;Brute-force Search&#xff09; 和 近似最近鄰搜索&#xff08;Approximate Nearest Neighbor, ANN&#xff09;。 逐一計算相似度&#xff1a;這是暴力搜索&#xff0c;能保證100%找到最相似的向量&#xff0c;但速…

docker Neo4j

Day 1 &#xff1a;Docker Desktop 基礎熟悉 運行官方 hello-world 測試&#xff1a; docker -run hello-world 運行 Nginx 體驗容器暴露端口&#xff1a; docker run -d -p 8080:80 nginx -d --detach 以 分離模式 運行容器 -p --publish 設置 宿主機與容器的端口映射。…

Win10_Qt6_C++_YOLO推理 -(1)MingW-opencv編譯

先上效果圖&#xff1a; 因為是一個為了嘗試跑通的demo&#xff0c;美觀、功能都先忽略哈。 一、環境 庫版本下載鏈接備注cmakecmake-4.1.0-rc2-windows-x86_64.msihttps://cmake.org/download/make x86_64-15.1.0-release-posix-seh-ucrt-rt_v12-rev0.7zhttps://github.com/…

day060-zabbix監控各種客戶端

文章目錄0. 老男孩思想-一個人的背書1. zabbix各種客戶端1.1 Windows Server監控1.2 網絡設備監控1.3 java應用監控1.4 前端監控java程序故障2. 相關項監控3. 思維導圖0. 老男孩思想-一個人的背書 學歷、能力、態度、特長、人品、口碑&#xff08;身邊的人、領導&#xff09; …

OpenCV 官翻 2 - 圖像處理

文章目錄色彩空間轉換目標色彩空間轉換目標追蹤如何確定要追蹤的HSV值&#xff1f;練習圖像的幾何變換目標變換縮放翻譯旋轉仿射變換透視變換其他資源圖像閾值處理目標簡單閾值化自適應閾值化大津二值化法Otsu二值化算法原理其他資源練習圖像平滑處理目標二維卷積&#xff08;圖…