最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

非常規(guī)入門C語言:4、地址與指針

2023-06-14 10:10 作者:嬴寒  | 我要投稿

在上一章中,眾多基本數(shù)據(jù)類型與基本數(shù)據(jù)結(jié)構(gòu),我們惟未談及地址。就是以下這個表格:

下表通用64位計算機(jī)中的為無符號數(shù)據(jù)類型(中括號意為可省略)

首先,我們要注意到,地址是屬于無符號數(shù)據(jù)類型的,而且還有一個限制:這個表格的適用平臺是“通用64位計算機(jī)”。

當(dāng)然了,現(xiàn)在誰還在用32位的系統(tǒng)和32位的CPU呀!火車站?政府辦公室?

下面,我們就談?wù)劦刂愤@個調(diào)皮鬼,并且說說,指針到底是個啥!

每一個人都會有一個屬于自己的名字。但是在一些特殊的地方,人非常多,還可能會重名,記名字反而不是一件輕松的事兒,根據(jù)每個人共有的、穩(wěn)定的特征賦予一個“編號”,這些編號是有一定的規(guī)律的,這時無需關(guān)心你到底是誰,只需要按照編號進(jìn)行列隊,就能夠隨機(jī)找到你。而這個編號就可以說是你在這個列隊中地址。

如果人數(shù)實在是太多呢?那就分隊,比如每一隊20個人。這時再找人,只需要隨機(jī)說第幾隊、第幾號就能夠找到對應(yīng)的人。

如果人數(shù)還是很多呢?比如說......全國人都在一個班級里......那就劃省劃市劃縣劃鄉(xiāng)劃村(或者劃街道劃小區(qū)劃樓劃樓層)。

也就是說,組成整體的單位越多,單位所對應(yīng)的地址可能會越長。

但是地址也是數(shù)據(jù)呀,總得有地方記錄下來吧......所以你的身份證上必要有一長串記錄的是你的住址,還會有一個在全國范圍內(nèi)唯一的編號:身份證號碼。這就是你的“地址”。

所以,在計算機(jī)中,地址也是一樣的,也需要存儲下來,同時,還需要它參與運算。所以哪里運算速度最快,當(dāng)然就存儲在哪里嘍。計算機(jī)中,除了CPU,最快的當(dāng)然是寄存器了。所以找?guī)讉€寄存器專用于存儲地址,那這樣的寄存器就稱為“地址寄存器”,不過這個名字好像不大好聽。那就換個名字唄!既然地址的作用是找數(shù)據(jù),那也就是說指出數(shù)據(jù)在哪嘍,就叫“指針”吧!

如果一個數(shù)據(jù)很長,那簡單,我們找到它開始的地址,存在寄存器中,再找出它結(jié)束的地址。這樣一來,存儲開始地址的那個寄存器可能不會一直變化,但是存儲結(jié)束地址的那個寄存器可能會一直在變化,那也起個名字吧,這樣說也太麻煩了,啰里啰唆的。存儲開始地址的寄存器稱為“基地址指針寄存器”,存儲結(jié)束地址的寄存器稱為“偏移地址指針寄存器”,也可以叫做“堆棧指針寄存器”。這樣一來,就有了兩個專門指示數(shù)據(jù)開始地址與結(jié)束地址的寄存器了。

但是,還不行,因為地址還需要指示數(shù)據(jù)呀,地址本身沒有用的呀。所以,我們還需要幾個和數(shù)據(jù)本身相關(guān)的指針寄存器。幾個呢?

根據(jù)最基本的數(shù)學(xué)運算,我們可以知道,不管多復(fù)雜的運算,都可以看作是兩個基本式之間運算的復(fù)合。也就是說,代價最低的情況下,一般運算最多需要兩個基本式。這也就意味著,我們只需要兩個寄存器就可以處理大部分的數(shù)據(jù)。

至于怎么運算,那是累加寄存器的事兒,地址寄存器只負(fù)責(zé)和地址相關(guān)的事兒。

那......兩個地址之間最有可能發(fā)生的情況就是數(shù)據(jù)的轉(zhuǎn)移,因為在內(nèi)存中進(jìn)行算術(shù)運算那也太慢了,而數(shù)據(jù)轉(zhuǎn)移完全就是把操作指令提示給內(nèi)存就完事兒了。所以從第一個寄存器轉(zhuǎn)移到第二個寄存器中去,那第一個寄存器就叫做“源指針寄存器”,第二個寄存器就叫做“目的指針寄存器”。

那這些寄存器能存多大的地址呢?那就得看CPU能存多大的數(shù),16位CPU最大處理16位的數(shù),32位CPU最大處理32位的數(shù),64位CPU最大處理64位的數(shù)......

很好,但是Intel不同意,他在8086這個16位的CPU上改動了一下,針對地址,他加了4根地址總線,也就意味著,可以用20位地址,也就是說,8086的地址范圍變成了2^20=1M。但是8086的寄存器都是16位的!那就“拼單”嘛。

16加4不就是20嗎?分別用兩個寄存器來標(biāo)識,也就說,用兩個寄存器給內(nèi)存分組了。一般情況下,都是大數(shù)加小數(shù),所以16位的大數(shù)一般也就放在段寄存器,而剩下的數(shù)就放在段偏移地址寄存器中。

根據(jù)段(Segment)存放數(shù)據(jù)的特性不同,分為4個最基本的段:代碼段(Code)、數(shù)據(jù)段(Data)、堆棧段(Stack)、附加段(Extension)。這些都是基地址,那么偏移地址呢,放哪里都可以,無所謂,問題不大。只要段基地址+偏移地址一共是20位,其他你高興就好。

可以看到,地址就是指針,指針就是地址。同時地址也可以被存儲,也就是可以像看待數(shù)據(jù)一樣看待地址,地址也是一種數(shù)據(jù)。但地址的特殊地方在于地址本身沒啥用,但在地址上的那個數(shù)據(jù)才是我們需要的。

需要注意的是,在一些“系統(tǒng)”中,指針的寬度可能會被“修飾”,即無論是32位系統(tǒng)還是64位系統(tǒng),在這些“系統(tǒng)”中,指針的寬度都是32位。但是在通用的系統(tǒng)平臺中,指針的寬度一般都是CPU的數(shù)據(jù)寬度,即32位系統(tǒng)中的指針寬度一般是32位,64位系統(tǒng)中的指針寬度一般是64位。

非常規(guī)入門C語言:4、地址與指針的評論 (共 條)

分享到微博請遵守國家法律
勐海县| 三江| 霍林郭勒市| 财经| 旬阳县| 涡阳县| 吴堡县| 普定县| 醴陵市| 洪湖市| 益阳市| 武清区| 秭归县| 孝义市| 丽水市| 宁晋县| 革吉县| 多伦县| 莎车县| 云南省| 视频| 盐亭县| 娄底市| 高邮市| 涟水县| 年辖:市辖区| 安平县| 德清县| 从江县| 新闻| 沂水县| 确山县| 洛阳市| 阳原县| 洪湖市| 竹溪县| 泸水县| 洮南市| 峡江县| 台南县| 宜宾市|