sizeof你真的弄明白了吗?来看看这个例子
生活随笔
收集整理的這篇文章主要介紹了
sizeof你真的弄明白了吗?来看看这个例子
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
本文?轉自「嵌入式大雜燴」,喜歡的同學可以關注~sizeof基礎
在C語言中,sizeof是一個操作符(operator),而不是函數!其用于判斷數據類型或者表達式長度(所占的內存字節數)。其有兩種表達形式:(1)sizeof(類型說明符)
(2)sizeof 表達式
我們通常使用第(1)種形式。其返回值類型為size_t,在頭文件stddef.h中定義。這是一個依賴于編譯系統的值,一般定義為:typedef unsigned int size_t;首先確定我們當前編譯環境中C語言各個基本數據類型在內存中所占字節數,我這里是32bit編譯環境:
int main(void)
{
printf("sizeof(char) = %u\n", sizeof(char));
printf("sizeof(short) = %u\n", sizeof(short));
printf("sizeof(int) = %u\n", sizeof(int));
printf("sizeof(long) = %u\n", sizeof(long));
printf("sizeof(float) = %u\n", sizeof(float));
printf("sizeof(double)= %u\n", sizeof(double));
return 0;
}
我們這里的輸出結果為:
int main(void)
{
char *s = "hello";
printf("sizeof(char) = %u\n", sizeof(char));
printf("sizeof(char*)= %u\n", sizeof(char*));
printf("sizeof('a') = %u\n", sizeof('a'));
printf("sizeof(*s+0) = %u\n", sizeof(*s+0));
printf("sizeof(*s) = %u\n", sizeof(*s));
printf("sizeof(s) = %u\n", sizeof(s));
return 0;
}
實際輸出結果為:你懵了嗎?沒懵的話算我輸簡要分析:(1)sizeof(char) 的值為1。因為char類型數據在內存中占1字節。(2)sizeof(char*)的值為4。因為char*代表一個指針,在32bit環境中為4字節,也即unsigned int的字節長度。(3)sizeof('a')的值為4。因為此處‘a’是獨立存在的一個字符(沒有賦值給其它變量),實際上就是一個整型數,占4個字節,即此處‘a’對應的ascii碼的十進制為整數97。(貌似解釋得有些牽強,但事實就是這樣)但是需要注意的是,若有如下定義:char ch = 'a';則此處ch的字節數sizeof(ch)的值為1,而不是4。(4)sizeof(*s+0)的值為4,因為'h'+0 轉化為int,占4字節。此處涉及到類型轉換的問題。即不同類型的數據進行運算時,會首先轉換成相同數據類型。轉換規則為(圖片來源于網絡):
免責聲明:內容整理自網絡,版權歸原作者所有,如涉及作品版權問題,請及時與我們聯系,謝謝!
//end
若覺得文章不錯,轉發分享,也是我們繼續更新的動力。5T資源大放送!包括但不限于:C/C++,Linux,Python,Java,PHP,人工智能,PCB、FPGA、DSP、labview、單片機、等等!
sizeof基礎
在C語言中,sizeof是一個操作符(operator),而不是函數!其用于判斷數據類型或者表達式長度(所占的內存字節數)。其有兩種表達形式:(1)sizeof(類型說明符)(2)sizeof 表達式
我們通常使用第(1)種形式。其返回值類型為size_t,在頭文件stddef.h中定義。這是一個依賴于編譯系統的值,一般定義為:typedef unsigned int size_t;首先確定我們當前編譯環境中C語言各個基本數據類型在內存中所占字節數,我這里是32bit編譯環境:
int main(void)
{
printf("sizeof(char) = %u\n", sizeof(char));
printf("sizeof(short) = %u\n", sizeof(short));
printf("sizeof(int) = %u\n", sizeof(int));
printf("sizeof(long) = %u\n", sizeof(long));
printf("sizeof(float) = %u\n", sizeof(float));
printf("sizeof(double)= %u\n", sizeof(double));
return 0;
}
我們這里的輸出結果為:
sizeof典型問題
sizeof看起來似乎很簡單,那來看看下面這段代碼,你能做對幾個:int main(void)
{
char *s = "hello";
printf("sizeof(char) = %u\n", sizeof(char));
printf("sizeof(char*)= %u\n", sizeof(char*));
printf("sizeof('a') = %u\n", sizeof('a'));
printf("sizeof(*s+0) = %u\n", sizeof(*s+0));
printf("sizeof(*s) = %u\n", sizeof(*s));
printf("sizeof(s) = %u\n", sizeof(s));
return 0;
}
實際輸出結果為:你懵了嗎?沒懵的話算我輸簡要分析:(1)sizeof(char) 的值為1。因為char類型數據在內存中占1字節。(2)sizeof(char*)的值為4。因為char*代表一個指針,在32bit環境中為4字節,也即unsigned int的字節長度。(3)sizeof('a')的值為4。因為此處‘a’是獨立存在的一個字符(沒有賦值給其它變量),實際上就是一個整型數,占4個字節,即此處‘a’對應的ascii碼的十進制為整數97。(貌似解釋得有些牽強,但事實就是這樣)但是需要注意的是,若有如下定義:char ch = 'a';則此處ch的字節數sizeof(ch)的值為1,而不是4。(4)sizeof(*s+0)的值為4,因為'h'+0 轉化為int,占4字節。此處涉及到類型轉換的問題。即不同類型的數據進行運算時,會首先轉換成相同數據類型。轉換規則為(圖片來源于網絡):
免責聲明:內容整理自網絡,版權歸原作者所有,如涉及作品版權問題,請及時與我們聯系,謝謝!
往期好文合集
戳這里>>//end
若覺得文章不錯,轉發分享,也是我們繼續更新的動力。5T資源大放送!包括但不限于:C/C++,Linux,Python,Java,PHP,人工智能,PCB、FPGA、DSP、labview、單片機、等等!
在公眾號內回復「更多資源」,即可免費獲取,期待你的關注~
長按識別圖中二維碼關注
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的sizeof你真的弄明白了吗?来看看这个例子的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何使用plink进行连锁不平衡分析
- 下一篇: 分析师称微软收购动视暴雪只会伤害索尼,不