char a 與char a 所佔空間解析題

2021-08-03 12:51:18 字數 1160 閱讀 3302

在分析之前,我們先熟悉下在16位、32位、64位下指標型別 與char型別所佔空間

16位        32位       64位

char 1 1 1

指標 2 4 8(我們在有的編譯環境下面sizeof出來是4 是因為編譯器為了編譯32位機器**而做的妥協,按道理上是8位)

ok,讓我們開始測試並分析如下各種情況

如下假設我們的程式(64位機器)如下:

void countsize(char a)  

int main()

siezeof(a)==6, sizeof(b)==4, sizeof( *b)==1, sizeof(c)=10

因為a的結尾還有乙個字串結束符』\0』所以一共有6個位元組

同時 b是乙個指標 無論如何都是4, 但是*可以理解為乙個位址型別,b才存放著另外乙個變數的位址所以輸出為1

,c已經指定了大小 則輸出為10.

特別有意思的是 countsiz(a)==4 countsize(b)==4 countsize(c)==4 其實coutsize(char a)與coutsize(char *a)是一樣的,它是不會為你記錄陣列的大小,而是傳入了位址引數。

關於字元陣列的長度問題(sizeof與strlen)

strlen

strlen函式遇到'\0'結束統計並返回。
char chs0[7] = ; // 長度為6, 在末尾自動加上了'\0'

char chs1[7] = ; // 長度為6

char chs2 = ; // 長度為6

char chs3 = ; // 長度未知,因為陣列最後沒有結束符'/0'

char chs4[6] = // 長度未知,因為陣列最後沒有結束符'/0'

char c=;

可寫為:

char c=;

或去掉{}寫為:

char c=」c program」;

用字串方式賦值比用字元逐個賦值要多佔乙個位元組, 用於存放字串結束標誌』/0』。

sizeof

sizeof就是計算所佔位元組長度
如果有錯誤歡迎指正 感謝 比心

char a 與char a 的區別

char a hello 中的a是指向第乙個字元 a 的乙個指標 char a 20 hello 中陣列名a也是執行陣列第乙個字元 h 的指標 但二者並不相同 看例項 把兩個字串相加 結果 對比 結果 把字串加到指標所指的字串上去,出現段錯誤,本質原因 d 0123456789 存放在常量區,是無法...

char a 與char a 的區別

char a hello 中的a是指向第乙個字元 h 的乙個指標 char a 20 hello 中陣列名a也是執行陣列第乙個字元 h 的指標 但二者並不相同 看例項 把兩個字串相加 結果 對比 結果 把字串加到指標所指的字串上去,出現段錯誤,本質原因 d 0123456789 存放在常量區,是無法...

char a 與char a 的區別

char a hello 中的a是指向第乙個字元 a 的乙個指標 char a 20 hello 中陣列名a也是執行陣列第乙個字元 h 的指標 但二者並不相同 看例項 把兩個字串相加 結果 對比 結果 把字串加到指標所指的字串上去,出現段錯誤,本質原因 d 0123456789 存放在常量區,是無法...