淺析C語(yǔ)言中對(duì)于char*和char[]的理解
C語(yǔ)言對(duì)于char*和char[]的理解
1、char*和char[]的共同點(diǎn)
都是指針,指向第一個(gè)字符所在的地址,C語(yǔ)言指針可以代替數(shù)組使用。
指針也是一種變量,只不過(guò)它的內(nèi)存單元中保存的是一種標(biāo)識(shí)其他位置的地址,而地址也是整數(shù),在32位平臺(tái)下,就是32位,4個(gè)字節(jié)
指針的指向是指 指針變量所保存的其他的地址單元中 所存放的數(shù)據(jù)類型
。
int *ptr; //ptr指針保存的地址所在內(nèi)存單元中的數(shù)據(jù)類型是整型 float *p; //這個(gè)p指針指向的內(nèi)存地址存放的元素類型就是浮點(diǎn)型
而不管指向的數(shù)據(jù)類型是哪種,其實(shí)對(duì)于指針本身的值永遠(yuǎn)是整型,因?yàn)樗4娴牡刂肪褪钦麛?shù)。
2、char*的用法
3、char[]的用法
//char[] char a[20] = "aaa"; char b[] = "bbbbb"; char c[] = {'s','t','r','i','n','g','\0'}; char d[] = {"dddd"}; //一般這樣初始化 char num[20] = {0}; //初始化的目的是為了添加\0,否則\0會(huì)跑到莫名其妙的地方導(dǎo)致很多錯(cuò)誤。 //ASCII碼中0對(duì)應(yīng)的是nul符,即\0。這一行的意義就是給0~19都賦\0。
4、怎么輸出char*地址
雖然指針名就代表的是地址,但在輸出時(shí)需要加&,僅限cout。
const char* p = "ppp"; cout<<&p<<endl; //地址 方法一 cout<<(void*)p<<endl;//地址 方法二 cout<<p<<endl; //ppp
const char* a = "ppp"; printf("%p \n", a); //16進(jìn)制地址,不過(guò) %p的輸出格式并不統(tǒng)一,有的編譯器帶0x前綴,有的不帶 printf("%#X \n", a);//16進(jìn)制地址,前綴統(tǒng)一是0x printf("%s \n", a); //ppp
5、strlen和sizeof
sizeof | strlen | |
性質(zhì) | 運(yùn)算符 | 函數(shù) |
功能 | 以字節(jié)為單位計(jì)算操作數(shù)占用的內(nèi)存大小 | 計(jì)算字符串的長(zhǎng)度(strlen函數(shù)遇到\0就會(huì)停止下來(lái),返回\0前出現(xiàn)的字符個(gè)數(shù),不包括\0) |
時(shí)間 | 編譯時(shí) | 運(yùn)行時(shí) |
參數(shù) | 類型/各種object | const char*\char*\char[] |
返回值 | size_t | size_t |
頭文件 | 運(yùn)算符沒(méi)有頭文件 | string.h |
6、char*和string
區(qū)別 | string | char* |
本質(zhì) | STL中的一個(gè)容器,string封裝了char*。 | 指針 |
內(nèi)存管理 | 由系統(tǒng)管理,除非系統(tǒng)內(nèi)存池用完,否則不會(huì)出現(xiàn)內(nèi)存問(wèn)題 | 棧/堆,如果是堆需要手動(dòng)釋放 |
7、總結(jié)
1、const在*前修飾指定的類型,const在*之后修飾指針。
2、 讀入只能是char [],因?yàn)樽x入需要明確的地址,注意必須標(biāo)定長(zhǎng)度。
總結(jié):char * s 只是一個(gè)保存字符串首地址的指針變量,char a[]是許多連續(xù)的內(nèi)存單元,單元中的元素是char型,char * 和 char a[]具有相同的效果,源于字符串的本質(zhì),即給一個(gè)字符串地址,便可以操作字符串,但char* 和 char a[]的本質(zhì)屬性不一樣。
改值還得是char*,因?yàn)榉奖恪?/p>
Reference
到此這篇關(guān)于C語(yǔ)言中對(duì)于char*和char[]的理解的文章就介紹到這了,更多相關(guān)C語(yǔ)言char*和char[]內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++通過(guò)類實(shí)現(xiàn)控制臺(tái)貪吃蛇
這篇文章主要為大家詳細(xì)介紹了C++通過(guò)類實(shí)現(xiàn)控制臺(tái)貪吃蛇,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-04-04C/C++讀取大文件數(shù)據(jù)方式詳細(xì)講解
這篇文章主要介紹了C語(yǔ)言/C++讀取大文件數(shù)據(jù)的完整方式過(guò)程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-09-09c語(yǔ)言實(shí)現(xiàn)足球比賽積分統(tǒng)計(jì)系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了c語(yǔ)言實(shí)現(xiàn)足球比賽積分統(tǒng)計(jì)系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05用C語(yǔ)言實(shí)現(xiàn)自動(dòng)售貨機(jī)
這篇文章主要為大家詳細(xì)介紹了用C語(yǔ)言實(shí)現(xiàn)自動(dòng)售貨機(jī),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單猜拳小游戲
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單猜拳小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-03-03C++實(shí)現(xiàn)類似延時(shí)停頓的打字效果
這篇文章主要介紹的是使用C++實(shí)現(xiàn)類似延時(shí)停頓的打字效果的代碼,非常的簡(jiǎn)單,推薦給大家,有需要的小伙伴可以參考下。2015-03-03