在C/C++中,指針和數(shù)組在很多地方可以互換使用,這使得我們產(chǎn)生一種錯(cuò)覺(jué),感覺(jué)數(shù)組和指針兩者是完全等價(jià)的,事實(shí)上數(shù)組和指針是有很大的區(qū)別的。
1.兩者在含義上的區(qū)別。
數(shù)組對(duì)應(yīng)著一塊內(nèi)存區(qū)域,而指針是指向一塊內(nèi)存區(qū)域。其地址和容量在生命期里不會(huì)改變,只有數(shù)組的內(nèi)容可以改變;而指針卻不同,它指向的內(nèi)存區(qū)域的大小可以隨時(shí)改變,而且當(dāng)指針指向常量字符串時(shí),它的內(nèi)容是不可以被修改的,否則在運(yùn)行時(shí)會(huì)報(bào)錯(cuò)。
如:
在編譯時(shí)不會(huì)報(bào)錯(cuò),但是在運(yùn)行時(shí)會(huì)報(bào)錯(cuò),原因在于企圖改變s1的內(nèi)容,由于s1,s2指向的是常量字符串,其內(nèi)容是不可修改的,因此在運(yùn)行時(shí)不會(huì)通過(guò)。而下面這個(gè)程序是可以運(yùn)行通過(guò)的:
?
?
在VC++ 6.0上可以編譯運(yùn)行通過(guò),原因在于數(shù)組的內(nèi)容是可以被修改的,這就充分體現(xiàn)了指針和數(shù)組的區(qū)別,并不是完全等價(jià)的。
2.計(jì)算內(nèi)存容量的區(qū)別。
用運(yùn)算符sizeof可以計(jì)算出數(shù)組的容量(字節(jié)數(shù)),而用sizeof卻無(wú)法計(jì)算指針?biāo)竷?nèi)存的容量,用sizeof(p)得到的結(jié)果永遠(yuǎn)是4或者2(即指針變量所占內(nèi)存單元的字節(jié)數(shù),一般情況下指針變量占2個(gè)或4個(gè)字節(jié)的內(nèi)存單元)。在進(jìn)行參數(shù)傳遞時(shí),數(shù)組會(huì)自動(dòng)退化為同類(lèi)型的指針。
看下面這段代碼和運(yùn)行結(jié)果:
?
?
新聞熱點(diǎn)
疑難解答
網(wǎng)友關(guān)注