變量名和變量地址之間是什么關(guān)系?
變量名是高級語言定義的一種東西,主要用來方便的尋址變量。在編譯過程中,每個(gè)變量都有一個(gè)變量名,每個(gè)名對應(yīng)一個(gè)應(yīng)用,也就是變量的第一個(gè)字節(jié)地址。
也就是說,變量名與其地址是一一對應(yīng)的映射關(guān)系。但是編譯后變量名是不存在的,所以C必須有一個(gè)機(jī)制來區(qū)分與形式相似的變量名和真實(shí)地址。
對于變量A,不加意味著取A的值,加意味著取A在內(nèi)存中的地址,后一個(gè)值只能賦給指針變量。其實(shí)后來發(fā)現(xiàn)這種設(shè)計(jì)有一些弊端,這也是為什么Java,C#刪除了它們的區(qū)分,統(tǒng)一使用引用(和指針略有不同,但機(jī)制是一樣的)。
地址符的作用,地址符是什么意思?
地址提取的功能是告訴系統(tǒng)定義的變量,該值存儲在內(nèi)存空間中。scanf函數(shù)根據(jù)這個(gè)地址值尋址,然后從這個(gè)地址空間中取出我需要的數(shù)據(jù)值。對于變量來說,變量在內(nèi)存中的地址只能通過ampa獲取,而對于指針變量和數(shù)組來說,不需要這種地址獲取。
C語言的指針不是地址嗎?為什么地址還要區(qū)分類型?指針的加法也好難,該怎么理解呢?
類型描述了指向內(nèi)容的指針的數(shù)據(jù)長度。為了讓你不不正確地操作內(nèi)容,C語言編譯器正在檢查類型。
當(dāng)然,如果能保證邏輯和內(nèi)容長度的正確性,也可以在C語言層面強(qiáng)制轉(zhuǎn)換成另一種指針類型。
在匯編語言中,沒有內(nèi)容的類型,只有內(nèi)容的長度。連內(nèi)容的整數(shù)符號都沒有說清楚,整數(shù)的符號體現(xiàn)體現(xiàn)在操作數(shù)據(jù)的不同機(jī)器指令中。
C語言中指針類型的不同只是為了防止你在語法層面容易出錯(cuò)。