2011-10-10 122 views
1

今天,出於好奇,我想的東西很奇怪:機器內存地址的內存地址? (C語言)

驗證碼:

int num = 2; 
int * point = # 

printf("%p\n" , &point); 


問題:

1)我做的第一件事是我追加變量num的地址到指針point,之後我用printf()打印出指針point中的地址存儲區。

2)後來,我只是嘗試修改代碼(上面的代碼),看看它會給出什麼樣的行爲,這是由指針使用printf()打印出指針point的地址,而不是打印出來的地址,商店point這是變量num的地址。

3)儘管地址與變量num的地址不同,只是想知道這個行爲在C標準中是否定義好了,它仍然會打印出地址嗎?爲什麼指針也有自己的地址,我認爲它的工作是存儲其他可變地址。



謝謝你花時間閱讀本。

回答

7

指針只是另一個變量,因此也需要一個生活的地方。

1

計算機中的所有內容都是「1」和「0」。就像一個int變量在某個特定的內存位置只是一個零值一樣,一個指針也就是這樣。不同之處在於您的程序如何決定威脅該內存單元的內容。如果你聲明一個指針,它將使用存儲器單元來存儲一些數據的地址,但存儲器所在的存儲器單元也必須有一個地址,就像其他的一樣。

這不是關於C語言,而是關於計算機如何工作。

5
|----------|        
| point |        
|   | 1000      
| 2000 |        
|----------|       
     |   
     | 
     | 
     | 
     -------------------->|----------| 
          | num | 
          |   | 2000 
          | 2  |  
          |----------| 

指針point本身也是一個變量,它需要內存中的一些空間駐留在。如上所示,它在內存中指向/存儲num的存儲位置(2000),但是對於point存在,它本身需要一個單獨的存儲位置(1000)。

+0

我愛圖片! –