周建儒(四川信息職業(yè)技術(shù)學(xué)院,四川廣元628040)
?
C語(yǔ)言與C++語(yǔ)言幾點(diǎn)差異的應(yīng)用實(shí)例分析
周建儒
(四川信息職業(yè)技術(shù)學(xué)院,四川廣元628040)
摘要:C語(yǔ)言是面向過(guò)程的編程語(yǔ)言,C++語(yǔ)言是面向?qū)ο蟮木幊陶Z(yǔ)言,雖然它們是兩種不同的程序設(shè)計(jì)語(yǔ)言,但是在基礎(chǔ)語(yǔ)法的實(shí)際應(yīng)用中既有相似之處,又有細(xì)微差別,尤其是在字符串與字符數(shù)組的混合使用及互相轉(zhuǎn)換過(guò)程中體現(xiàn)得更為明顯,這些差異是其底層實(shí)現(xiàn)過(guò)程不同所致。結(jié)合程序?qū)嵗姆治隹梢钥闯觯瑑煞N語(yǔ)言在布爾數(shù)據(jù)類型、字符串處理、指針與引用的參數(shù)傳遞等相關(guān)應(yīng)用中的差異。
關(guān)鍵詞:C語(yǔ)言;C++語(yǔ)言;實(shí)例分析
C語(yǔ)言是面向過(guò)程的編程語(yǔ)言,C++語(yǔ)言是面向?qū)ο蟮木幊陶Z(yǔ)言,兩者之間有一些共同的特點(diǎn)——多種數(shù)據(jù)類型,豐富的運(yùn)算符,運(yùn)算靈活等。兩種語(yǔ)言在基礎(chǔ)語(yǔ)法上有相似之處,而在應(yīng)用上卻有細(xì)微的差別。本文就C語(yǔ)言和C++語(yǔ)言在邏輯值的計(jì)算、字符串處理、指針與引用方面的差異結(jié)合程序?qū)嵗敿?xì)剖析。
C語(yǔ)言沒(méi)有布爾類型(bool),C++語(yǔ)言有布爾類型。雖然C語(yǔ)言中沒(méi)有布爾類型,但是卻有邏輯運(yùn)算和關(guān)系運(yùn)算,也有邏輯真和邏輯假的概念[1],用1表示邏輯真,用0表示邏輯假。雖然C++語(yǔ)言有布爾類型,但是布爾值卻不是真正的邏輯值true和false,而是與C語(yǔ)言極為相似的表示方式——數(shù)值1和0分別表示邏輯真和假。因?yàn)檫壿嬛悼梢杂脭?shù)值1和0表示,所以C和C++的邏輯、關(guān)系運(yùn)算并無(wú)本質(zhì)區(qū)別,應(yīng)用靈活。下面結(jié)合程序進(jìn)行詳細(xì)分析。
示例程序1:
由于C++語(yǔ)言布爾類型變量的值是1(真)或0(假),所以布爾變量不僅可以進(jìn)行邏輯、關(guān)系運(yùn)算,還可以進(jìn)行算術(shù)運(yùn)算。例如程序1中的語(yǔ)句(1),就是邏輯值參與算術(shù)運(yùn)算,關(guān)系運(yùn)算8>=3的結(jié)果是邏輯值1,邏輯運(yùn)算2&&-1的計(jì)算結(jié)果也是1,整個(gè)表達(dá)式1+2-1結(jié)果為整數(shù)2。此外,可以給布爾變量賦一個(gè)非零的整數(shù)(非0表示邏輯真),但是該布爾變量在參與運(yùn)算時(shí),其值不是所賦的整數(shù),而是1。因?yàn)樗硎具壿嫛罢妗?,故?dāng)作1進(jìn)行運(yùn)算。例如程序1的語(yǔ)句(2)和(3),盡管變量x賦值為-2,但是2×x在計(jì)算時(shí)是2×1等于2,并非2×-2等于-4。關(guān)系表達(dá)式x>y等價(jià)于1>0,故關(guān)系成立,結(jié)果為“真”,值為1而并非0。
C語(yǔ)言與C++語(yǔ)言的關(guān)系、邏輯運(yùn)算與Java語(yǔ)言有本質(zhì)的不同。例如語(yǔ)句(4)和(5),表達(dá)式a2 C字符串與C++字符串的區(qū)別
C++語(yǔ)言集成了C語(yǔ)言中字符串(簡(jiǎn)稱C字符串)函數(shù),同時(shí)還擴(kuò)展了字符串類string,所以,用C++語(yǔ)言編程時(shí)既可以使用C字符串的庫(kù)函數(shù),又可以使用string類的成員函數(shù)。當(dāng)自定義函數(shù)的形式參數(shù)是string類的對(duì)象,而實(shí)際參數(shù)是C字符數(shù)組時(shí),兩者類型不同,此時(shí)需要將C字符數(shù)組轉(zhuǎn)化為C++字符串string類的對(duì)象。具體的處理方式,我們通過(guò)以下示例程序來(lái)分析。
示例程序2:
標(biāo)準(zhǔn)C++中string類的構(gòu)造函數(shù)是string(const char *s);可以用C語(yǔ)言的字符串(或字符數(shù)組)構(gòu)造C++的string類對(duì)象(即C++字符串類string),例如程序2中的語(yǔ)句(1)正是此用。C++語(yǔ)言中的string類對(duì)象,可以使用重載運(yùn)算符“+”進(jìn)行字符串的連接,例如程序2中的語(yǔ)句(2),將字符串s2連接在字符串s1的末尾,并且不需考慮字符串s1是否能夠容納所有字符,因?yàn)閟tring類的對(duì)象相當(dāng)于動(dòng)態(tài)數(shù)組,其內(nèi)存字節(jié)數(shù)會(huì)隨著字符串長(zhǎng)度自動(dòng)增加。然而,C語(yǔ)言的字符串連接卻不能使用“+”運(yùn)算符連接,只能使用strcat()函數(shù),例如語(yǔ)句(4),前提條件是數(shù)組ps有足夠的長(zhǎng)度可以容納字符串ps1的所有字符。此外,string類對(duì)象之間可以用比較運(yùn)算符“==”“!=”直接進(jìn)行大小關(guān)系的比較運(yùn)算,如程序2中語(yǔ)句(5),也可以使用賦值運(yùn)算符“=”將一個(gè)sring類對(duì)象直接賦值給另一個(gè)string對(duì)象,而C語(yǔ)言的字符數(shù)組是無(wú)法這般使用的。
c_str()函數(shù)原型是const char *c_str();它是string類的成員函數(shù),返回一個(gè)以空字符結(jié)尾的字符串,即返回當(dāng)前字符串的首地址,但是不能直接將該地址賦值給字符類型的指針,可以將當(dāng)前字符串拷貝給一個(gè)長(zhǎng)度合適的字符數(shù)組,例如語(yǔ)句(3)。s2是string類的對(duì)象,s2.c_str()是將C++字符串對(duì)象s2轉(zhuǎn)化為C字符串常量,并將該字符串常量通過(guò)C語(yǔ)言的字符串拷貝函數(shù)拷貝到長(zhǎng)度合適的字符數(shù)組ps中。
在用C++語(yǔ)言編程時(shí),C字符串及庫(kù)函數(shù)和string類及成員函數(shù)可以混合使用,但是兩者有本質(zhì)的區(qū)別,C字符串是普通數(shù)據(jù)類型,要么是字符數(shù)組(char str[10]),要么是指向字符串的指針(char *str),內(nèi)存一旦分配,其長(zhǎng)度是不能自動(dòng)改變的,在進(jìn)行字符串的連接、拷貝操作時(shí)一定要注意字符串的長(zhǎng)度。C++字符串string是類,有豐富的成員函數(shù),使用格式是對(duì)象名.函數(shù)名();當(dāng)C字符串和string的對(duì)象進(jìn)行混合操作時(shí),最好是將類型轉(zhuǎn)換為一致,盡可能避免C字符串與string類的對(duì)象直接計(jì)算。
C++字符串并不以‘ 广汉市| 海兴县| 永嘉县| 宾川县| 新田县| 漯河市| 嘉定区| 平顶山市| 锡林浩特市| 佛坪县| 保亭| 元谋县| 达拉特旗| 商丘市| 铅山县| 双城市| 西城区| 邢台县| 邻水| 曲阜市| 顺昌县| 辛集市| 保山市| 安达市| 景泰县| 色达县| 杨浦区| 通江县| 巴马| 老河口市| 尖扎县| 闽清县| 五华县| 科技| 池州市| 丰城市| 旌德县| 白山市| 高淳县| 福海县| 雅安市|