C語言 內(nèi)存編址
計(jì)算機(jī)中的內(nèi)存是由一個(gè)個(gè)的存儲(chǔ)單元構(gòu)成的,為了管理這些存儲(chǔ)單元,對每個(gè)存儲(chǔ)單元進(jìn)行編號,這就是內(nèi)存的編址。內(nèi)存編址是按字節(jié)進(jìn)行的,每個(gè)字節(jié)對應(yīng)一個(gè)地址編號。當(dāng)程序運(yùn)行時(shí),系統(tǒng)中會(huì)有一個(gè)內(nèi)存分配表,每遇到一次變量聲明語句(int、double……)或函數(shù)調(diào)用語句(函數(shù)中的形參),系統(tǒng)會(huì)根據(jù)變量的大小在內(nèi)存中尋找合適的空間分配,并且在內(nèi)存分配表中增加一行記錄,記載變量與內(nèi)存地址的對應(yīng)關(guān)系。例如,有如下程序:
main()
{
int a;
char ch;
double x;
…
}
則該程序在內(nèi)存中的內(nèi)存分配表的近似形式如表所示。
ID | Name | Address | Length |
1 | a | 2000 | 4B |
2 | ch | 2800 | 1B |
3 | 乂 | 2300 | 8B |
例如,某賓館有30個(gè)房間,每個(gè)房間都有自己的編號101、102、103……當(dāng)有旅客需要住宿,服務(wù)臺工作人員會(huì)查詢賓館的客房情況,并將合適的空房分配給旅客住宿。同時(shí)也將旅客住宿信息(身份證號、姓名、房間號等)登記下來。
一個(gè)變量根據(jù)其類型不同在內(nèi)存中所占的字節(jié)數(shù)也不同,例如char占1個(gè)字節(jié)、short占2個(gè)字節(jié)……變量在內(nèi)存中的首字
節(jié)單元的地址稱為該變置的地址。例如表11-1中,變量a在內(nèi)存中的地址為2000,它在內(nèi)存中占據(jù)2000~2003地址段,如圖所示。若要訪問變量a,只需到內(nèi)存空間2000開始的位置去訪問就可以了。
可以看出i內(nèi)存地址就是要訪問變置的標(biāo)識,所以將地址稱為指針,也就是說,指針就是地址。
變量的地址和變置的值是兩個(gè)不同的概念。例如,張三去某賓館住宿,他住在了301房間。那么可以認(rèn)為301是變置的地址,而張三住在此房間中,張三就是此刻變量的值。變置的地址一旦被分配,在它作用域內(nèi)其地址是不會(huì)改變的,而變量中的值是可以改變的。如301房間今天住的是張三這個(gè)人,而明天可能住的是李四。
點(diǎn)擊加載更多評論>>