變數:用來標識(identify)一塊記憶體區域,這塊區域的值一般是可以更改的,這就是它「變」的由來,但是我們可以通過使用如const等一些修飾符號來限定這一記憶體區域的操作特性(characteristic),即變數的操作特性。用const修飾的使變數不能更改的就和常量一樣的變數叫做常變數。
變數名:是乙個識別符號(identifier),用來指代一塊記憶體區域,即變數,使用變數使我們操作記憶體以區域(area),以塊(block)為單位,提高了方便性。
你的機器**中,是不會出現變數名的;變數名是給我們程式設計師操作記憶體來使用的。
想想在彙編年代,沒有變數名,我們操作記憶體,都是用位址來直接操作的,還要控制區域大小;當然組合語言已經有了簡單的變數。
對於編譯器,它會蒐集我們的變數名,比如我們定義了乙個全域性的int a;那麼編譯器都為我們做了什麼呢?
它會為程式預留4個位元組的空間(假設在32位平台),並把我們的變數名「a」儲存進符號表,並用這個符號表的索引對應實際的空間。
如果下面出現b = a;那麼它就會根據符號表找到變數的真正的物理位置,取得它的值,賦給b。
這是寫編譯器需要做的,我們需要建立符號表。
但是實際在彙編層次上,操作的都是位址而已,不存在任何名稱了。
變數名是否占用記憶體
想看結論的直接拖到最後 變數名究竟是否占用記憶體呢?今天在網上看見這麼一張圖,裡邊有這麼一句話不是很理解 變數名編譯後,變成乙個 記憶體位址 這個 記憶體位址一般是直接存在於 段中 那麼什麼是 段呢?一般把程式所佔的主存空間分為 從低到高 1.段 2.資料段 3.棧4.堆 其中,段和資料段是 編譯期...
引用是否占用記憶體空間?
反彙編看一下 int n 2 intmain 生成可執行檔案,反彙編得到 a.out file format mach o 64 bit x86 64 disassembly of section text,text text 100000f90 55 pushq rbp 100000f91 48 ...
判斷變數名是否合法
條件 1.變數名可以由字母,數字或下劃線組成 2.變數名只能以字母或下劃線開頭 例 s hello 1.判斷變數名的第乙個元素是否為字母或下劃線 s 0 2.如果第乙個元素符合條件,判斷除了第乙個元素的其他元素 s 1 for迴圈 依次遍歷字串的每乙個元素 for i in hello if i.i...