之前有同學(xué)題過(guò)這個(gè)問(wèn)題,我就想為何要會(huì)提這個(gè)問(wèn)題?大概因?yàn)樗麄兌寂c常量有關(guān)吧!define是宏定義,它可以把一個(gè)標(biāo)識(shí)符變成一個(gè)常量,而const是一個(gè)修飾符,它可以修飾一個(gè)變量為常類(lèi)型,使其不可被修改!今天我們就把這兩個(gè)類(lèi)型做一個(gè)區(qū)別。
首先,本質(zhì)上兩者不同,define修飾出來(lái)的是常量!并且是真常量!
而const修飾的是假常量,它本質(zhì)還是變量!只不過(guò)編譯器不讓你修改!
下面仔細(xì)講解,為什么說(shuō)define修飾出來(lái)的是真常量呢?因?yàn)椋琩efine是宏定義,是宏替換!意味著程序在編譯前期會(huì)進(jìn)行文本替換,例如代碼define PI 3.1415926 這句話(huà),編譯器會(huì)將代碼中所有出現(xiàn)PI的地方全部用3.1415926替換,然后在進(jìn)行編譯,所以本質(zhì)它就是一個(gè)常量嘛!
至于const呢,我們知道const一般修飾于定義變量的前面,比如cosnt int a = 10,意味著a就一直是19,是是一個(gè)不可修改的變量了。
往后試圖給a重新賦值都會(huì)引發(fā)錯(cuò)誤。這就是const修飾之后的結(jié)果,但請(qǐng)注意,這里不可修改的原因其實(shí)是編譯器在做檢查,檢查是否有修改這塊內(nèi)存上的值,一旦有就會(huì)報(bào)錯(cuò),所以從根本上說(shuō),cosnt修飾的變量依然是一個(gè)變量!只不過(guò)編譯器不讓你修改而已!
整體總結(jié)如下:
類(lèi)別 | define | cosnt |
何時(shí)處理 | 編譯期間進(jìn)行宏替換 | 編譯期間檢查是否有修改 |
誰(shuí)來(lái)執(zhí)行 | 由系統(tǒng)判斷是否被修改 | 由編譯器限制 |
存儲(chǔ)位置 | 數(shù)據(jù)常量在內(nèi)存只讀區(qū) | 變量在哪就在哪里 |
怎么樣,這下大家頓悟了嗎?
大家有任何問(wèn)題歡迎聯(lián)系我們,一起探討研究!