日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > 單片機 > 單片機
[導讀]要研究指針,我們得先來深入理解內(nèi)存地址這個概念。打個比方:整個內(nèi)存就相當于一個擁有很多房間的大樓,每個房間都有房間號,比如從 101、102、103 一直到 NNN,我們可以說這些房間號就是房間的地址。相對應的內(nèi)存中

要研究指針,我們得先來深入理解內(nèi)存地址這個概念。打個比方:整個內(nèi)存就相當于一個擁有很多房間的大樓,每個房間都有房間號,比如從 101、102、103 一直到 NNN,我們可以說這些房間號就是房間的地址。相對應的內(nèi)存中的每個單元也都有自己的編號,比如從0x00、0x01、0x02 一直到 0xNN,我們同樣可以說這些編號就是內(nèi)存單元的地址。房間里可以住人,對應的內(nèi)存單元里就可以“住進”變量了:假如一位名字叫 A 的人住在 101 房間,我們可以說 A 的住址就是 101,或者 101 就是 A 的住址;對應的,假如一個名為 x 的變量住在編號為 0x00 的這個內(nèi)存單元中,那么我們可以說變量 x 的內(nèi)存地址就是 0x00,或者 0x00就是變量 x 的地址。

基本的內(nèi)存單元是字節(jié),英文單詞為 Byte,我們所使用的 STC89C52 單片機共有 512 字節(jié)的 RAM,就是我們所謂的內(nèi)存,但它分為內(nèi)部 256 字節(jié)和外部 256 字節(jié),我們僅以內(nèi)部的 256 字節(jié)為例,很明顯其地址的編號從 0 開始就是 0x00~0xFF。我們用 C 語言定義的各種變量就存在 0x00~0xFF 的地址范圍內(nèi),而不同類型的變量會占用不同數(shù)量的內(nèi)存單元,即字節(jié),可以結(jié)合前面講過的 C 語言變量類型深入理解。假如現(xiàn)在定義了


unsigned char a = 1;

unsigned char b = 2;

unsigned int c = 3;

unsigned long d = 4;


這樣 4 個變量,我們把這 4 個變量分別放到內(nèi)存中,就會是表 12-1 中所列的樣子,我們先來大概了解一下他們的存儲方式。

表12-1 變量存儲方式內(nèi)存地址存儲的數(shù)據(jù)…………0x07d0x06d0x05d0x04d0x03c0x02c0x01b0x00a


變量 a、b 和 c 和 d 之間的變量類型不同,因此在內(nèi)存中所占的存儲單元也不一樣,a 和b 都占一個字節(jié),c 占了 2 個字節(jié),而 d 占了 4 個字節(jié)。那么,a 的地址就是 0x00,b 的地址就是 0x01,c 的地址就是 0x02,d 的地址就是 0x04,它們的地址的表達方式可以寫成:&a,&b,&c,&d。這樣就代表了相應變量的地址,C 語言中變量前加一個&表示取這個變量的地址,&在這里就叫做“取址符”。

講到這里,有一點延伸內(nèi)容,大家可以了解下:比如變量 c 是 unsigned int 類型的,占了2 個字節(jié),存儲在了 0x02 和 0x03 這兩個內(nèi)存地址上,那么 0x02 是它的低字節(jié)還是高字節(jié)呢?

這個問題由所用的 C 編譯器與單片機架構(gòu)共同決定,單片機類型不同就有可能不同,大家知道這么回事即可。比如:在我們使用的 Keil+51 單片機的環(huán)境下,0x02 存的是高字節(jié),0x03存的是低字節(jié)。這是編譯底層實現(xiàn)上的細節(jié)問題,并不影響上層的應用,如下這兩種情況在應用上絲毫不受這個細節(jié)的影響:強制類型轉(zhuǎn)換——b = (unsigned char) c,那么 b 的值一定是 c 的低字節(jié);取地址——&c,則得到的一定是 0x02,這都是 C 語言本身所決定的規(guī)則,不因單片機編譯器的不同而有所改變。

實際生活中,我們要尋找一個人有兩種方式,一種方式是通過它的名字來找人,還有第二種方式就是通過它的住宅地址來找人。我們在派出所的戶籍管理系統(tǒng)的信息輸入方框內(nèi),輸入小明的家庭住址,系統(tǒng)會自動指向小明的相關(guān)信息,輸入小剛的家庭住址,系統(tǒng)會自動指向小剛的相關(guān)信息。這個供我們輸入地址的方框,在戶籍管理系統(tǒng)叫做“地址輸入框”。

那么,在 C 語言中,我們要訪問一個變量,同樣有兩種方式:一種是通過變量名來訪問,另一種自然就是通過變量的地址來訪問了。在 C 語言中,地址就等同于指針,變量的地址就是變量的指針。我們要把地址送到上邊那個所謂的“地址輸入框”內(nèi),這個“地址輸入框”既可以輸入 x 的指針,又可以輸入 y 的指針,所以相當于一個特殊的變量——保存指針的變量,因此稱之為指針變量,簡稱為指針,而通常我們說的指針就是指指針變量。

地址輸入框輸入誰的地址,指向的就是這個人的信息,而給指針變量輸入哪個普通變量的地址,它自然就指向了這個變量的內(nèi)容,通常的說法就是指針指向了該變量。


本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

鏈表作為一種基礎的數(shù)據(jù)結(jié)構(gòu),在程序設計中扮演著重要角色。掌握鏈表的高效操作技巧,特別是逆序、合并和循環(huán)檢測,對于提升算法性能和解決復雜問題至關(guān)重要。本文將詳細介紹這些操作的C語言實現(xiàn),并分析其時間復雜度。

關(guān)鍵字: 鏈表 C語言

在C/C++多文件編程中,靜態(tài)變量(static)與全局變量的作用域規(guī)則看似簡單,實則暗藏諸多陷阱。開發(fā)者若未能準確理解其鏈接屬性與生命周期,極易引發(fā)難以調(diào)試的內(nèi)存錯誤、競態(tài)條件以及維護災難。本文將深入剖析這兩類變量的作...

關(guān)鍵字: 靜態(tài)變量 全局變量 C語言

在嵌入式系統(tǒng)和服務器開發(fā)中,日志系統(tǒng)是故障排查和運行監(jiān)控的核心組件。本文基于Linux環(huán)境實現(xiàn)一個輕量級C語言日志庫,支持DEBUG/INFO/WARN/ERROR四級日志分級,并實現(xiàn)按大小滾動的文件輪轉(zhuǎn)機制。該設計在某...

關(guān)鍵字: C語言 嵌入式系統(tǒng)

在嵌入式系統(tǒng)和底層驅(qū)動開發(fā)中,C語言因其高效性和可控性成為主流選擇,但缺乏原生單元測試支持成為開發(fā)痛點。本文提出一種基于宏定義和測試用例管理的輕量級單元測試框架方案,通過自定義斷言宏和測試注冊機制,實現(xiàn)無需外部依賴的嵌入...

關(guān)鍵字: C語言 嵌入式系統(tǒng) 驅(qū)動開發(fā)

在嵌入式系統(tǒng)開發(fā)中,實時操作系統(tǒng)(RTOS)的任務調(diào)度算法直接影響系統(tǒng)的響應速度和資源利用率。時間片輪轉(zhuǎn)(Round-Robin, RR)作為一種經(jīng)典的公平調(diào)度算法,通過為每個任務分配固定時間片實現(xiàn)多任務并發(fā)執(zhí)行。本文將...

關(guān)鍵字: 實時操作系統(tǒng) RTOS C語言

在Linux設備驅(qū)動開發(fā)中,等待隊列(Wait Queue)是實現(xiàn)進程睡眠與喚醒的核心機制,它允許進程在資源不可用時主動放棄CPU,進入可中斷睡眠狀態(tài),待資源就緒后再被喚醒。本文通過C語言模型解析等待隊列的實現(xiàn)原理,結(jié)合...

關(guān)鍵字: 驅(qū)動開發(fā) C語言 Linux

在嵌入式系統(tǒng)開發(fā)中,C語言與匯編的混合編程是優(yōu)化性能、訪問特殊指令或硬件寄存器的關(guān)鍵技術(shù)。然而,內(nèi)聯(lián)匯編的語法差異和寄存器使用規(guī)則常導致難以調(diào)試的問題。本文以ARM Cortex-M和x86架構(gòu)為例,系統(tǒng)梳理內(nèi)聯(lián)匯編的核...

關(guān)鍵字: C語言 匯編混合編程

在計算機安全領(lǐng)域,緩沖區(qū)溢出攻擊長期占據(jù)漏洞利用榜首。這種攻擊通過向程序緩沖區(qū)寫入超出其容量的數(shù)據(jù),覆蓋相鄰內(nèi)存區(qū)域(如返回地址),進而實現(xiàn)任意代碼執(zhí)行。本文將深入探討棧保護機制與安全函數(shù)(如snprintf)的集成防御...

關(guān)鍵字: 棧保護 安全函數(shù) C語言

在嵌入式系統(tǒng)和大規(guī)模數(shù)值計算等性能敏感場景中,程序優(yōu)化是提升效率的關(guān)鍵環(huán)節(jié)。gprof作為GNU工具鏈中的性能分析工具,能夠精準定位CPU時間消耗熱點。本文通過實際案例演示gprof的三個核心使用步驟,幫助開發(fā)者快速識別...

關(guān)鍵字: C語言 gprof 熱點函數(shù)

哈希表作為高效數(shù)據(jù)檢索的核心結(jié)構(gòu),其性能高度依賴沖突解決策略。本文通過C語言實現(xiàn)對比鏈地址法與開放尋址法,揭示兩種方法在內(nèi)存占用、查詢效率及實現(xiàn)復雜度上的差異,為工程實踐提供量化參考。

關(guān)鍵字: 哈希表 鏈地址法 開放尋址法 C語言
關(guān)閉