C/C++數(shù)組地址與指針運(yùn)算詳解
1. 數(shù)組地址與數(shù)組首元素地址的本質(zhì)區(qū)別在C/C編程中數(shù)組名和指針經(jīng)常被混為一談但它們的底層機(jī)制存在關(guān)鍵差異。當(dāng)我們?cè)诖a中聲明一個(gè)數(shù)組時(shí)比如int arr[5] {1,2,3,4,5}arr這個(gè)標(biāo)識(shí)符實(shí)際上包含兩層含義作為數(shù)組整體時(shí)它代表整個(gè)連續(xù)內(nèi)存塊的起始地址在大多數(shù)表達(dá)式中它會(huì)退化為指向首元素的指針這種雙重身份導(dǎo)致了許多初學(xué)者的困惑。通過以下代碼可以直觀展示差異printf(數(shù)組地址%p\n, (void*)arr); printf(首元素地址%p\n, (void*)arr[0]); printf(數(shù)組名退化值%p\n, (void*)arr);雖然三個(gè)printf輸出的數(shù)值相同但它們的語義完全不同。arr獲取的是整個(gè)數(shù)組對(duì)象的地址類型為int(*)[5]而arr[0]和arr退化后得到的是首元素地址類型為int*。2. 指針運(yùn)算中的類型寬度差異這種類型差異在指針運(yùn)算時(shí)表現(xiàn)得尤為明顯。對(duì)int(*)[5]類型指針加1地址值會(huì)增加sizeof(int[5])即20字節(jié)假設(shè)int為4字節(jié)而對(duì)int*類型加1只增加sizeof(int)即4字節(jié)。int arr[5] {1,2,3,4,5}; int (*p1)[5] arr; // 數(shù)組指針 int *p2 arr; // 元素指針 printf(p1: %p, p11: %p\n, p1, p11); // 相差20字節(jié) printf(p2: %p, p21: %p\n, p2, p21); // 相差4字節(jié)關(guān)鍵提示數(shù)組名在sizeof和操作時(shí)不會(huì)退化為指針。sizeof(arr)得到的是數(shù)組總大小20字節(jié)而非指針大小。3. 多維數(shù)組的地址解析對(duì)于二維數(shù)組int matrix[3][4]其內(nèi)存布局是連續(xù)存放的12個(gè)int。此時(shí)matrix類型為int[3][4]退化為int(*)[4]matrix[i]類型為int[4]退化為int*matrix類型為int(*)[3][4]int matrix[3][4] {0}; printf(matrix: %p\n, matrix); // 類型int(*)[4] printf(matrix: %p\n, matrix); // 類型int(*)[3][4] printf(matrix[0]: %p\n, matrix[0]); // 類型int*這種層級(jí)關(guān)系解釋了為什么二維數(shù)組作為函數(shù)參數(shù)時(shí)必須指定第二維大小void func(int arr[][4])。因?yàn)榫幾g器需要知道每個(gè)行的跨度。4. 數(shù)組與指針的常見誤區(qū)4.1 數(shù)組名不是左值數(shù)組名不能出現(xiàn)在賦值語句左側(cè)int a[5], b[5]; a b; // 錯(cuò)誤數(shù)組名不是可修改的左值4.2 sizeof的行為差異int arr[5]; int *p arr; printf(%zu\n, sizeof(arr)); // 輸出20整個(gè)數(shù)組大小 printf(%zu\n, sizeof(p)); // 輸出8指針大小4.3 函數(shù)參數(shù)傳遞的退化當(dāng)數(shù)組作為函數(shù)參數(shù)時(shí)總會(huì)退化為指針void func(int param[5]) { printf(%zu\n, sizeof(param)); // 輸出8不是20 }5. 實(shí)際應(yīng)用中的典型場景5.1 動(dòng)態(tài)二維數(shù)組的實(shí)現(xiàn)理解數(shù)組指針后可以優(yōu)雅地實(shí)現(xiàn)動(dòng)態(tài)二維數(shù)組int (*matrix)[4] malloc(3 * sizeof(int[4])); matrix[1][2] 5; // 正常訪問 free(matrix);5.2 數(shù)組遍歷的優(yōu)化技巧利用指針?biāo)阈g(shù)可以提升遍歷效率int arr[100] {0}; for(int *p arr; p arr 100; p) { *p rand(); }5.3 結(jié)構(gòu)體內(nèi)數(shù)組成員結(jié)構(gòu)體包含數(shù)組時(shí)內(nèi)存布局是連續(xù)的struct Packet { int header; char data[1024]; }; struct Packet pkt; printf(%p\n, pkt.data[0]); // 等于header地址sizeof(int)6. 調(diào)試技巧與常見問題排查6.1 地址打印的正確方式打印地址時(shí)應(yīng)使用%p格式說明符并將指針轉(zhuǎn)為void*printf(%p\n, (void*)arr);6.2 數(shù)組越界檢測通過比較地址可以檢測潛在的越界訪問int arr[5]; int *p arr 10; // 可能越界 if(p arr p arr 5) { // 安全訪問 }6.3 類型不匹配警告當(dāng)看到incompatible pointer type警告時(shí)通常意味著數(shù)組指針類型使用錯(cuò)誤int (*p)[5] malloc(5 * sizeof(int)); // 錯(cuò)誤應(yīng)為sizeof(int[5])理解數(shù)組地址與元素地址的區(qū)別是掌握C/C內(nèi)存模型的關(guān)鍵一步。在實(shí)際項(xiàng)目中這種認(rèn)知能幫助開發(fā)者避免細(xì)微的內(nèi)存錯(cuò)誤編寫出更高效、更安全的代碼。

相關(guān)新聞

邁向國產(chǎn)化平臺(tái):摩爾信使MThings Ubuntu AMD64版

邁向國產(chǎn)化平臺(tái):摩爾信使MThings Ubuntu AMD64版

不少工業(yè)現(xiàn)場已經(jīng)在使用國產(chǎn)化Linux。工控機(jī)、邊緣計(jì)算設(shè)備、值班電腦和企業(yè)服務(wù)器中,都能看到它的身影。摩爾信使 MThings Ubuntu AMD64 版,讓已經(jīng)使用Ubuntu的現(xiàn)場多一個(gè)簡單選擇:在熟悉的系統(tǒng)中安裝MThings,繼續(xù)完成設(shè)備連接、…

2026/8/4 4:22:48 閱讀更多
告別命令行恐懼:用N_m3u8DL-CLI-SimpleG輕松下載M3U8視頻

告別命令行恐懼:用N_m3u8DL-CLI-SimpleG輕松下載M3U8視頻

告別命令行恐懼:用N_m3u8DL-CLI-SimpleG輕松下載M3U8視頻 【免費(fèi)下載鏈接】N_m3u8DL-CLI-SimpleG N_m3u8DL-CLIs simple GUI 項(xiàng)目地址: https://gitcode.com/gh_mirrors/nm3/N_m3u8DL-CLI-SimpleG 還在為復(fù)雜的命令行參數(shù)而頭疼嗎?想下載M3U8格式…

2026/8/4 4:22:48 閱讀更多
Linux grep命令深度解析:從正則表達(dá)式到高效日志排查實(shí)戰(zhàn)

Linux grep命令深度解析:從正則表達(dá)式到高效日志排查實(shí)戰(zhàn)

1. 項(xiàng)目概述:為什么grep是Linux工程師的“瑞士軍刀”?在Linux世界里,處理文本和日志是家常便飯。無論是排查一個(gè)線上服務(wù)的錯(cuò)誤,還是從成千上萬的配置文件中找到某個(gè)特定的參數(shù),我們都需要一種高效、精準(zhǔn)的“搜索”能力…

2026/8/4 4:22:48 閱讀更多
AI寫SEO文章全鏈路拆解,從關(guān)鍵詞挖掘到排名飆升的7步閉環(huán)工作流

AI寫SEO文章全鏈路拆解,從關(guān)鍵詞挖掘到排名飆升的7步閉環(huán)工作流

更多請(qǐng)點(diǎn)擊: https://codechina.net 第一章:AI寫SEO文章全鏈路拆解,從關(guān)鍵詞挖掘到排名飆升的7步閉環(huán)工作流 SEO內(nèi)容生產(chǎn)已進(jìn)入AI驅(qū)動(dòng)的精細(xì)化運(yùn)營階段。傳統(tǒng)人工寫作耗時(shí)長、覆蓋窄、數(shù)據(jù)反饋滯后,而一套可復(fù)用、可驗(yàn)證、可迭代…

2026/8/4 5:32:50 閱讀更多
機(jī)房判分測試工具

機(jī)房判分測試工具

本菜鳥記錄一下項(xiàng)目的機(jī)房判分測試工具,如有不完善的地方,歡迎指正 基于 CDP 協(xié)議的 WebView2 自動(dòng)化測試工具,用于批量驗(yàn)證學(xué)生端考試流程。 目錄 1. 項(xiàng)目概述2. 技術(shù)架構(gòu)3. 配置文件4. 打包部署5. CDP 調(diào)試協(xié)議6. WebSocket 客戶端7. CDP …

2026/8/4 5:32:50 閱讀更多
Linux交換空間管理

Linux交換空間管理

Linux 交換空間管理 計(jì)算機(jī)存儲(chǔ)器的層次結(jié)構(gòu) 計(jì)算機(jī)存儲(chǔ)器速度越快,成本較高。 為了獲得好的性能/價(jià)格比,計(jì)算機(jī)中各種存儲(chǔ)器組成一個(gè)層狀的塔式結(jié)構(gòu),取長補(bǔ)短,協(xié)調(diào)工作。 CPU 寄存器,是 CPU 內(nèi)部用來存放數(shù)據(jù)的一…

2026/8/4 5:32:50 閱讀更多
STM32三ADC同步采樣:原理、配置與高精度測量實(shí)踐

STM32三ADC同步采樣:原理、配置與高精度測量實(shí)踐

1. 項(xiàng)目概述:為什么需要三個(gè)ADC同步采樣?在嵌入式系統(tǒng)開發(fā),尤其是涉及精密測量、電力監(jiān)控、電機(jī)控制或音頻處理的領(lǐng)域,我們常常會(huì)遇到一個(gè)核心需求:需要同時(shí)、準(zhǔn)確地捕獲多個(gè)模擬信號(hào)。這里的“同時(shí)”是關(guān)鍵。想象一下…

2026/8/4 5:32:50 閱讀更多
智能體架構(gòu)設(shè)計(jì):從ReAct模式到約束引導(dǎo)容錯(cuò)實(shí)踐

智能體架構(gòu)設(shè)計(jì):從ReAct模式到約束引導(dǎo)容錯(cuò)實(shí)踐

1. 項(xiàng)目概述:當(dāng)智能體開始“學(xué)步”最近,無論是技術(shù)社區(qū)還是行業(yè)討論,“智能體”這個(gè)詞的熱度都高得有點(diǎn)燙手。但如果你仔細(xì)觀察,會(huì)發(fā)現(xiàn)一個(gè)有趣的現(xiàn)象:大家談?wù)摰慕裹c(diǎn),正從年初那種“無所不能”的宏大敘事&…

2026/8/4 5:32:49 閱讀更多
海量異構(gòu)增量同步困境破局:KFS 全鏈路并行同步實(shí)戰(zhàn)

海量異構(gòu)增量同步困境破局:KFS 全鏈路并行同步實(shí)戰(zhàn)

海量異構(gòu)增量同步困境破局:KFS全鏈路并行同步實(shí)戰(zhàn)前言 隨著業(yè)務(wù)數(shù)據(jù)爆發(fā)式增長,大量企業(yè)正在進(jìn)行數(shù)據(jù)庫國產(chǎn)化遷移、多源數(shù)據(jù)匯聚、異地災(zāi)備建設(shè)。傳統(tǒng)CDC同步工具普遍采用單線程串行解析、串行入庫架構(gòu),一旦業(yè)務(wù)增量上漲,很容易出…

2026/8/4 5:22:49 閱讀更多
清華大學(xué)重磅EST:植物自導(dǎo)電閃蒸焦耳熱600°C/2600°C兩步法!稀土超積累植物秒級(jí)轉(zhuǎn)化為CeO?-石墨烯電催化劑!

清華大學(xué)重磅EST:植物自導(dǎo)電閃蒸焦耳熱600°C/2600°C兩步法!稀土超積累植物秒級(jí)轉(zhuǎn)化為CeO?-石墨烯電催化劑!

通訊作者:鄧兵、劉建國通訊單位:清華大學(xué)DOI:https://doi.org/10.1021/acs.est.6c00603研究背景稀土元素(REEs)是清潔能源技術(shù)與電子器件不可或缺的核心原料,然而傳統(tǒng)提取方式依賴能耗高、排放大的采礦與強(qiáng)…

2026/8/4 0:01:30 閱讀更多
貴州師范大學(xué)JCIS:混合焓調(diào)控設(shè)計(jì)PtCoNiCuCr高熵合金!ORR半波電位0.89 V/質(zhì)量活性2.4倍Pt/C!

貴州師范大學(xué)JCIS:混合焓調(diào)控設(shè)計(jì)PtCoNiCuCr高熵合金!ORR半波電位0.89 V/質(zhì)量活性2.4倍Pt/C!

研究背景質(zhì)子交換膜燃料電池(PEMFCs)因其高能量轉(zhuǎn)換效率和清潔零排放特性備受關(guān)注,然而陰極氧還原反應(yīng)(ORR)動(dòng)力學(xué)遲緩、鉑催化劑成本高昂且耐久性不足的問題嚴(yán)重制約了其商業(yè)化進(jìn)程。將 Pt 與 3d 過渡金屬合金化可調(diào)控…

2026/8/4 0:01:30 閱讀更多
福州大學(xué)/清華大學(xué)AFM:脈沖焦耳熱900°C/1s合成Co?Cu催化劑,寬電位NH?法拉第效率~100%,MEA穩(wěn)定300h

福州大學(xué)/清華大學(xué)AFM:脈沖焦耳熱900°C/1s合成Co?Cu催化劑,寬電位NH?法拉第效率~100%,MEA穩(wěn)定300h

通訊作者:萬宇馳、張久俊、呂瑞濤通訊單位:福州大學(xué) 、清華大學(xué)DOI:https://doi.org/10.1002/adfm.76112核心導(dǎo)讀:本文提出"分步升級(jí)"廢硝酸鹽處理新路線——利用廢水中的金屬離子經(jīng)快速焦耳熱(40V&#xff…

2026/8/4 0:01:30 閱讀更多
MoneyPrinterPlus實(shí)戰(zhàn)指南:AI視頻批量生成與自動(dòng)化發(fā)布完整解決方案

MoneyPrinterPlus實(shí)戰(zhàn)指南:AI視頻批量生成與自動(dòng)化發(fā)布完整解決方案

MoneyPrinterPlus實(shí)戰(zhàn)指南:AI視頻批量生成與自動(dòng)化發(fā)布完整解決方案 【免費(fèi)下載鏈接】MoneyPrinterPlus AI一鍵批量生成各類短視頻,自動(dòng)批量混剪短視頻,自動(dòng)把視頻發(fā)布到抖音,快手,小紅書,視頻號(hào)上,賺錢從來沒有這么容易過! 支持本地語音模型chatTTS,fasterwhisper,…

2026/8/3 7:44:46 閱讀更多
3分鐘搞定!QQ空間歷史說說完整備份終極指南

3分鐘搞定!QQ空間歷史說說完整備份終極指南

3分鐘搞定!QQ空間歷史說說完整備份終極指南 【免費(fèi)下載鏈接】GetQzonehistory 獲取QQ空間發(fā)布的歷史說說 項(xiàng)目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否曾想過,那些年發(fā)過的QQ空間說說,那些記錄青春的文字…

2026/8/3 12:53:38 閱讀更多
AMAT 0100-02186 I/O 分配 PCB

AMAT 0100-02186 I/O 分配 PCB

AMAT 0100-02186 I/O分配PCB板是應(yīng)用材料(Applied Materials)公司生產(chǎn)的一款用于半導(dǎo)體設(shè)備的I/O信號(hào)分配電路板。該型號(hào)(0100-02186)的核心特點(diǎn)如下:專用于Endura等半導(dǎo)體工藝腔室。集成信號(hào)路由與分配功能。連接控制…

2026/8/3 19:34:52 閱讀更多
Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動(dòng)機(jī)

Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動(dòng)機(jī)

Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動(dòng)機(jī)是日本日清(Nissei)品牌的一款工業(yè)用三相異步電機(jī),適用于自動(dòng)化設(shè)備及通用機(jī)械驅(qū)動(dòng)。該型號(hào)(FFMN-32L-10-T0 40AX)的核心特點(diǎn)如下:三相交流異步電動(dòng)機(jī)。額定…

2026/8/3 19:34:54 閱讀更多