C/C++中【變量、變量名、地址之間的關係】

變量:用來標識一塊內存區域,即變量就是一塊內存區域,而這個區域裏面的值可以更改,故叫做‘變’量

變量名:是一個標識符,用來指代一塊內存區域,即變量,變量名並不佔用內存空間,使用變量名讓我們操作內存以區域、以塊爲單位,提高了方便性

實例說明:

編譯:
變量名是給編譯器看的,編譯器根據變量是局部還是全局分配內存地址或棧空間,所謂的變量名在內存中不存在,操作時轉換成地址數存放在寄存器中了。

編譯器會將合法的變量名放到一個叫“符號表”的一個表中。
每個符號對應一個地址。當你調用此變量時,就會根據此符號表找到對應的地址,然後進行操作。

int a;
//編譯器分配4個字節內存,並命名該4個字節的空間名字爲a(即變量名),當用到變量名a時,就是在使用那4個字節的內存空間.

a = 5;
//5是一個常數,在程序編譯時存放在代碼的常量區存放着它的值(就是5),當執行a=5時,程序將5這個常量拷貝到a所在的4個字節空間中,就完成了賦值操作.

有一塊內存我們叫它a,內存裏存了一個常數:5。如果想知道5存在哪裏?就是要知道那塊地址是什麼,而那塊地址又叫a,那麼就有 &a 就是得到這塊內存的地址。a只是代表內存中的東西:5

a是我們對那個int類型變量的4個字節取的"名字"。

是我們人爲給的,實際上計算機並不存儲a這個名字。只是我們編程時給那4個字節內存取個名字好用。
實際上程序在編譯時,所有的a都轉換爲了那個地址空間了。編譯成機器代碼後,沒有a這個說法了。a這個名字只存在於我們編寫的代碼中。

5不是被隨機分配的,而總是位於程序的數據段中,可能在不同的機器上在數據段中的位置可能不一致,它的地址其實不能以我們常用到的內存地址來理解,因爲牽扯到一個叫"計算機尋址方式"的問題,所以寫很多都解釋不清楚,你自己找本彙編語言的書來學一下吧。

除了變量名不是內存地址,其他都是名都是地址嗎?

所謂的 “其他名“ 無非是:函數名、標識符常量名、指針名、數組名、結構名、類名等等。
比如指針名、數組名、函數名就是地址,它們分別表示指針所指向元素的地址、數組的首地址、函數的入口地址。

變量名雖然不直接表示地址,但可用取地址符號&來獲得它所代表的變量的存放地址。因爲在定義變量的同時會分配給它相應的空間。
而指針變量呢,它本身也是一個變量名,只不過它標識的那塊內存存放的是一個地址值。

關於 ’ & ’ 和 ’ * ’ 的理解和用法

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