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

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

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

基本的內(nèi)存單元是字節(jié),英文單詞為 Byte,我們所使用的 STC89C52 單片機(jī)共有 512 字節(jié)的 RAM,就是我們所謂的內(nèi)存,但它分為內(nèi)部 256 字節(jié)和外部 256 字節(jié),我們僅以內(nèi)部的 256 字節(jié)為例,很明顯其地址的編號從 0 開始就是 0x00~0xFF。我們用 C 語言定義的各種變量就存在 0x00~0xFF 的地址范圍內(nèi),而不同類型的變量會(huì)占用不同數(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 個(gè)變量,我們把這 4 個(gè)變量分別放到內(nèi)存中,就會(huì)是表 12-1 中所列的樣子,我們先來大概了解一下他們的存儲(chǔ)方式。

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


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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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