C C 中 變數 變數名 位址之間的關係

2021-10-03 14:48:49 字數 1296 閱讀 2741

變數:用來標識一塊記憶體區域,即變數就是一塊記憶體區域,而這個區域裡面的值可以更改,故叫做『變』量

變數名:是乙個識別符號,用來指代一塊記憶體區域,即變數,變數名並不占用記憶體空間,使用變數名讓我們操作記憶體以區域、以塊為單位,提高了方便性

例項說明:

編譯:

變數名是給編譯器看的,編譯器根據變數是區域性還是全域性分配記憶體位址或棧空間,所謂的變數名在記憶體中不存在,操作時轉換成位址數存放在暫存器中了。

編譯器會將合法的變數名放到乙個叫「符號表」的乙個表中。

每個符號對應乙個位址。當你呼叫此變數時,就會根據此符號表找到對應的位址,然後進行操作。

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不是被隨機分配的,而總是位於程式的資料段中,可能在不同的機器上在資料段中的位置可能不一致,它的位址其實不能以我們常用到的記憶體位址來理解,因為牽扯到乙個叫"計算機定址方式"的問題,所以寫很多都解釋不清楚,你自己找本組合語言的書來學一下吧。

除了變數名不是記憶體位址,其他都是名都是位址嗎?

所謂的 「其他名「 無非是:函式名、識別符號常量名、指標名、陣列名、結構名、類名等等。

比如指標名、陣列名、函式名就是位址,它們分別表示指標所指向元素的位址、陣列的首位址、函式的入口位址。

變數名雖然不直接表示位址,但可用取位址符號&來獲得它所代表的變數的存放位址。因為在定義變數的同時會分配給它相應的空間。

而指標變數呢,它本身也是乙個變數名,只不過它標識的那塊記憶體存放的是乙個位址值。

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

變數名和位址之間的關係

今天忽然意識到乙個問題,當我們定義乙個變數的時候,如何通過變數名讀取變數裡內容呢?變數名是否是乙個位址呢?c語言裡,記憶體的劃分?在c c 中,記憶體分成5個區,他們分別是堆 棧 自由儲存區 全域性 靜態儲存區和常量儲存區。棧 就是那些由編譯器在需要的時候分配,在不需要的時候自動清楚的變數的儲存區。...

Oracle中的替換變數, 變數名, 變數名

替換變數 僅用於sql plus或者用於原理和sql plus相同的開發工具 臨時儲存值 利用它可以達到建立通用指令碼的目的 利用它可以達到和使用者互動,故在sql plus中又稱互動式命令 替換變數的格式式在變數名稱前加乙個 以便在執行sql命令時提示使用者輸入替換資料,然後按輸入資料執行sql命...

C語言變數名和位址的關係?

變數 用來標識 identify 一塊記憶體區域,這塊區域的值一般是可以更改的,這就是它 變 的由來 但是我們可以通過使用如const等一些修飾符號來限定這一記憶體區域的操作特性。用const修飾的使變數不能更改的就和常量一樣的變數叫做常變數。變數名 是乙個識別符號 identifier 用來指代一...