指標佔幾個位元組,其中的原理是什麼?

2021-10-06 19:28:11 字數 1473 閱讀 2395

乙個指標佔幾個位元組的問題,感覺會c語言的同學都知道。但是在面試過程中,面了幾個同學,不是答忘記了,就是兩個、四個的瞎矇。。。

那麼,乙個指標到底佔幾個位元組呢?

其實,這個問題很簡單,稍微上網一搜,你就知道:

乙個指標在64位的計算機上,佔8個位元組;

乙個指標在32位的計算機上,佔4個位元組。

這麼簡單的問題,為什麼面試官願意問呢?其實這個問題不是在考你的記憶能力,是在考察你的計算機基礎能力。就比如,在你答出來4個位元組的情況下,面試官會問一句:

為什麼呢?

首先,我們要明白,指標就是位址,位址就是指標。 而位址是記憶體單元的編號。所以,乙個指標佔幾個位元組,等於是乙個位址的記憶體單元編號有多長。

我們都知道,在計算機中,cpu不能直接與硬碟進行資料交換,cpu只能直接跟記憶體進行資料交換。而cpu是通過資料匯流排、位址匯流排、控制匯流排三條線與記憶體進行資料傳輸與操作。

假如,我們想通過cpu在記憶體中讀取乙個數字3,那麼是怎樣乙個操作呢?

首先,cpu通過位址匯流排,在記憶體中找到數字3的位址;通過控制匯流排知道該操作是讀還是寫;然後通過資料匯流排,把數字3傳輸到cpu中。

我們可知道:

位址匯流排的寬度決定了cpu的定址能力;

資料匯流排的寬度決定了cpu單次資料傳輸的傳送量,也就是資料傳輸速度;

控制匯流排決定了cpu對其他控制項的控制能力以及控制方式。

這是幾種匯流排的型別以及簡單功能。

我們平時所說的計算機是64位、32位、16位,指的是計算機cpu中通用暫存器一次性處理、傳輸、暫時儲存的資訊的最大長度。即cpu在單位時間內(同一時間)能一次處理的二進位制數的位數。

假如,某計算機的位址匯流排是32位,那麼其一次可以處理的資訊是32條,每一條位址匯流排有0或1兩種可能,那麼32根位址匯流排一共有232種可能,也就是其描述的位址空間為0x0000 0000 0000 0000 ~ 232-1。

我們一般需要32個0或1的組合就可以找到記憶體中所有的位址,而32個0或1的組合,就是32個位,也就是4個位元組的大小,因此,我們只需要4個位元組就可以找到所有的資料。所以,在32位的計算機中,指標佔4個位元組。同理,在64位的計算機中,指標佔8個位元組。

同時也可以看出,由於位址匯流排為32,那麼每次定址的空間為0x0000 0000 0000 0000 ~ 232-1,那麼cpu的最大記憶體為232byte=222kb=212mb=22gb=4gb。

舉個例子

記憶體位址就像一條路上的門牌號,用幾位表示需要看門牌數量。

門牌號從0號開始編排,到232-1號結束,一共就有232個門牌號。分別為二進位制的

000000000000000000000000000號

000000000000000000000000001號

000000000000000000000000010號

最後111111111111111111111111110號

111111111111111111111111111號

每個門牌的號碼是32位(二進位制),乙個位元組為8位,32位就是4位元組。

乙個指標佔幾個位元組?原理是什麼呢?

乙個指標佔幾個位元組的問題,感覺會c語言的同學都知道。但是在面試過程中,面了幾個同學,不是答忘記了,就是兩個 四個的瞎矇。那麼,乙個指標到底佔幾個位元組呢?其實,這個問題很簡單,稍微上網一搜,你就知道 乙個指標在32位的計算機上,佔4個位元組 乙個指標在64位的計算機上,佔8個位元組。這麼簡單的問題...

c語言指標佔幾個位元組

記憶體是由位元組組成的,每個位元組都有乙個編號。指標變數主要是存放相同資料型別的變數的首位址。這裡的這個位址其實就是記憶體的某個位元組的編號。而這個編號的確定是與位址匯流排有關。如果位址匯流排是32位,則它的定址範圍是0 2 32 0 4g 那麼為乙個位元組的編址就會由32個0或者1組成。例如第乙個...

double佔幾個位元組

16位編譯器 char 1個位元組 char 即指標變數 2個位元組 short int 2個位元組 int 2個位元組 unsigned int 2個位元組 float 4個位元組 double 8個位元組 long 4個位元組 long long 8個位元組 unsigned long 4個位元...