您好,登錄后才能下訂單哦!
要研討指針,我們得先來深化了解內存地址這個概念。打個比如:全部內存就相當于一個具有許多房間的大樓,每一個房間都有房間號,比方從 101、102、103 不斷到 NNN,我們可以說這些房間號就是房間的地址。絕對應的內存中的每一個單位也都有本人的編號,比方從0x00、0x01、0x02 不斷到 0xNN,我們異樣可以說這些編號就是內存單位的地址。房間里可以住人,對應的內存單位里就可以“住進”變量了:假設一位名字叫 A 的人住在 101 房間,我們可以說 A 的住址就是 101,或許 101 就是 A 的住址;對應的,假設一個名為 x 的變量住在編號為 0x00 的這個內存單位中,那么我們可以說變量 x 的內存地址就是 0x00,或許 0x00就是變量 x 的地址。
根本的內存單位是字節,英文單詞為 Byte,我們所運用的 STC89C52 單片機共有 512 字節的 RAM,就是我們所謂的內存,但它分為外部 256 字節和內部 256 字節,我們僅之內部的 256 字節為例,很分明其地址的編號從 0 開端就是 0x00~0xFF。我們用 C 言語界說的各類變量就存在 0x00~0xFF 的地址規模內,而分歧類型的變量會占用分歧數目的內存單位,即字節,可以聯合后面講過的 C 言語變量類型深化了解。假設如今界說了
unsigned char a = 1; unsigned char b = 2; unsigned int c = 3; unsigned long d = 4;
如許 4 個變量,我們把這 4 個變量辨別放到內存中,就會是表 12-1 中所列的樣子,我們先來大約理解一下他們的存儲方法。
表12-1 變量存儲方法
內存地址 | 存儲的數據 |
---|---|
…… | …… |
0x07 | d |
0x06 | d |
0x05 | d |
0x04 | d |
0x03 | c |
0x02 | c |
0x01 | b |
0x00 | a |
變量 a、b 和 c 和 d 之間的變量類型分歧,因而在內存中所占的存儲單位也紛歧樣,a 和b 都占一個字節,c 占了 2 個字節,而 d 占了 4 個字節。那么,a 的地址就是 0x00,b 的地址就是 0x01,c 的地址就是 0x02,d 的地址就是 0x04,它們的地址的表達方法可以寫成:&a,&b,&c,&d。如許就代表了響應變量的地址,C 言語中變量前加一個&表現取這個變量的地址,&在這里就叫做“取址符”。
講到這里,有一點延長內容,人人可以理解下:比方變量 c 是 unsigned int 類型的,占了2 個字節,存儲在了 0x02 和 0x03 這兩個內存地址上,那么 0x02 是它的低字節照樣高字節呢?
這個成績由所用的 C 編譯器與單片機架構配合決議,單片機類型分歧就有能夠分歧,人人曉得這么回事即可。比方:在我們運用的 Keil+51 單片機的情況下,0x02 存的是高字節,0x03存的是低字節。這是編譯底層完成上的細節成績,并不影響下層的使用,如下這兩種狀況在使用上涓滴不受這個細節的影響:強迫類型轉換——b = (unsigned char) c,那么 b 的值必定是 c 的低字節;取地址——&c,則失掉的必定是 0x02,這多是 C 言語自身所決議的規矩,不因單片機編譯器的分歧而有所改動。
實踐生涯中,我們要尋覓一團體有兩種方法,一種方法是經過它的名字來找人,還有第二種方法就是經過它的室廬地址來找人。我們在派出所的戶籍治理零碎的信息輸出方框內,輸出小明的家庭住址,零碎會主動指向小明的相干信息,輸出小剛的家庭住址,零碎會主動指向小剛的相干信息。這個供我們輸出地址的方框,在戶籍治理零碎叫做“地址輸出框”。
那么,在 C 言語中,我們要拜訪一個變量,異樣有兩種方法:一種是經過變量名來拜訪,另一種天然就是經過變量的地址來拜訪了。在 C 言語中,地址就同等于指針,變量的地址就是變量的指針。我們要把地址送到上邊誰人所謂的“地址輸出框”內,這個“地址輸出框”既可以輸出 x 的指針,又可以輸出 y 的指針,所以相當于一個特別的變量——保管指針的變量,因而稱之為指針變量,簡稱為指針,而平日我們說的指針就是指指針變量。
地址輸出框輸出誰的地址,指向的就是這團體的信息,而給指針變量輸出哪個通俗變量的地址,它天然就指向了這個變量的內容,平日的說法就是指針指向了該變量。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。