首頁 > 軟體

淺析C語言中對於char*和char[]的理解

2023-11-01 18:01:01

C語言對於char*和char[]的理解

1、char*和char[]的共同點

都是指標,指向第一個字元所在的地址,C語言指標可以代替陣列使用。

指標也是一種變數,只不過它的記憶體單元中儲存的是一種標識其他位置的地址,而地址也是整數,在32位元平臺下,就是32位元,4個位元組

指標的指向是指 指標變數所儲存的其他的地址單元中 所存放的資料型別

int *ptr; //ptr指標儲存的地址所在記憶體單元中的資料型別是整型
float *p; //這個p指標指向的記憶體地址存放的元素型別就是浮點型

而不管指向的資料型別是哪種,其實對於指標本身的值永遠是整型,因為它儲存的地址就是整數。

2、char*的用法

3、char[]的用法

//char[]
char a[20] = "aaa";
char b[] = "bbbbb";
char c[] = {'s','t','r','i','n','g',''};
char d[] = {"dddd"};
 
//一般這樣初始化
char num[20] = {0};
//初始化的目的是為了新增,否則會跑到莫名其妙的地方導致很多錯誤。
//ASCII碼中0對應的是nul符,即。這一行的意義就是給0~19都賦。

4、怎麼輸出char*地址

雖然指標名就代表的是地址,但在輸出時需要加&,僅限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進位制地址,不過 %p的輸出格式並不統一,有的編譯器帶0x字首,有的不帶
printf("%#X n", a);//16進位制地址,字首統一是0x
printf("%s n", a);  //ppp

5、strlen和sizeof

sizeofstrlen
性質運運算元函數
功能以位元組為單位計算運算元佔用的記憶體大小計算字串的長度(strlen函數遇到就會停止下來,返回前出現的字元個數,不包括)
時間編譯時執行時
引數型別/各種objectconst char*char*char[]
返回值size_tsize_t
標頭檔案運運算元沒有標頭檔案string.h

6、char*和string

區別stringchar*
本質STL中的一個容器,string封裝了char*。指標
記憶體管理由系統管理,除非系統記憶體池用完,否則不會出現記憶體問題棧/堆,如果是堆需要手動釋放

7、總結

1、const在*前修飾指定的型別,const在*之後修飾指標。

2、 讀入只能是char [],因為讀入需要明確的地址,注意必須標定長度。

總結:char * s 只是一個儲存字串首地址的指標變數,char a[]是許多連續的記憶體單元,單元中的元素是char型,char * 和 char a[]具有相同的效果,源於字串的本質,即給一個字串地址,便可以操作字串,但char* 和 char a[]的本質屬性不一樣。

改值還得是char*,因為方便。

Reference

Link
Link

到此這篇關於C語言中對於char*和char[]的理解的文章就介紹到這了,更多相關C語言char*和char[]內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com