C++中兩種字符串定義方式和區(qū)別介紹
前言
在學(xué)習(xí)字符串這方面的內(nèi)容時(shí),發(fā)現(xiàn)字符串定義的兩種方式雖然內(nèi)容相同但還是有細(xì)微的區(qū)別
概念
字符串就是一串用雙引號(hào)連接起來(lái)的字符串字面值,簡(jiǎn)稱為字符串
定義方式
上代碼
char acter1[]="Hello world";//第一種定義方式 char acter2[]={'H','e','l','l','o','w','o','r','l','d'}; 第二種定義方式
此時(shí)并不能看出這兩種定義方式的區(qū)別,拿到VS調(diào)試器看看
很明顯的看出,第一種定義方式末尾添加了一個(gè)字符'\0',而'\0'就是字符串的轉(zhuǎn)義字符
而第二種定義方式就沒(méi)有自動(dòng)添加結(jié)束標(biāo)志
再看一下彼此的輸出結(jié)果
第一種定義方式輸出了我們想要的結(jié)果,而第二種定義方式則輸出了亂碼,我們不想要的字符
接下來(lái)我們來(lái)討論這個(gè)現(xiàn)象出現(xiàn)的原因
計(jì)算機(jī)的存儲(chǔ)方式
在計(jì)算機(jī)中,內(nèi)存是連續(xù)存儲(chǔ)的,我們創(chuàng)建一個(gè)數(shù)組出來(lái),就是在內(nèi)存中隨機(jī)開辟出一塊內(nèi)存空間來(lái)
而這塊空間的前后有什么數(shù)據(jù),我們并不是很清楚
如上圖,在第二種定義方式的影響下,我們沒(méi)有設(shè)定字符串結(jié)束標(biāo)志,那么它就會(huì)在后面隨機(jī)生成,至于是在第幾位我們并不清楚,所以會(huì)出現(xiàn)亂碼
假如我們自己添加上'\0',結(jié)果就會(huì)出現(xiàn)我們想要的樣子,如下圖
而我們也只能控制后面的字符,而無(wú)法控制前面的字符
總結(jié)
推薦使用第一種定義方式
到此這篇關(guān)于C++中兩種字符串定義方式和區(qū)別介紹的文章就介紹到這了,更多相關(guān)C++字符串定義方式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++采用openfilename打開文件對(duì)話框用法實(shí)例
這篇文章主要介紹了C++采用openfilename打開文件對(duì)話框用法實(shí)例,是C++文件操作中非常實(shí)用的技巧,需要的朋友可以參考下2014-10-10C++設(shè)計(jì)類不能被繼承的方法實(shí)例講解
在Java 中定義了關(guān)鍵字final,被final修飾的類不能被繼承,C++中如何實(shí)現(xiàn),下面我們來(lái)看一個(gè)例子2013-12-12Qt QCompleter自動(dòng)補(bǔ)全的實(shí)現(xiàn)
本文主要介紹了Qt QCompleter自動(dòng)補(bǔ)全的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-04-04基于Opencv實(shí)現(xiàn)雙目攝像頭拍照程序
這篇文章主要為大家詳細(xì)介紹了基于Opencv實(shí)現(xiàn)雙目攝像頭拍照程序,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-04-04