C言語變量的地址

要研討指針,我們得先來深化了解內存地址這個概念。打個比如:全部內存就相當於一個具有許多房間的大樓,每一個房間都有房間號,比方從 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 變量存儲方法

內存地址存儲的數據
…………
0x07d
0x06d
0x05d
0x04d
0x03c
0x02c
0x01b
0x00a


變量 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 的指針,所以相當於一個特別的變量——保管指針的變量,因而稱之爲指針變量,簡稱爲指針,而平日我們說的指針就是指指針變量。
地址輸出框輸出誰的地址,指向的就是這團體的信息,而給指針變量輸出哪個通俗變量的地址,它天然就指向了這個變量的內容,平日的說法就是指針指向了該變量。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章