sizeof你真的弄明白了吗?
sizeof基礎
在C語言中,sizeof是一個操作符(operator),而不是函數!其用于判斷數據類型或者表達式長度(所占的內存字節數)。其有兩種表達形式:
(1)sizeof(類型說明符)
(2)sizeof 表達式
我們通常使用第(1)種形式。
其返回值類型為size_t,在頭文件stddef.h中定義。這是一個依賴于編譯系統的值,一般定義為:
typedef unsigned int size_t;
首先確定我們當前編譯環境中C語言各個基本數據類型在內存中所占字節數,我這里是32bit編譯環境:
#include <stdio.h>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看起來似乎很簡單,那來看看下面這段代碼,你能做對幾個:
#include <stdio.h>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字節。此處涉及到類型轉換的問題。即不同類型的數據進行運算時,會首先轉換成相同數據類型。轉換規則為(圖片來源于網絡):
(5)sizeof(*s)的值為1,因為此處*s為字符串s的第1個字符‘h’(注意與第三點區分開來,這里是有用char來修飾的),所以所占字節長度為1。
(6)sizeof(s)的值為4,同(2),此處s是一個指針,在32bit環境中為4字節,也即unsigned int的字節長度。
End:以上就是本次的分享,如有錯誤,歡迎指出!歡迎轉發、下載、收藏、點贊
掃碼或長按關注
回復「?加群?」進入技術群聊
總結
以上是生活随笔為你收集整理的sizeof你真的弄明白了吗?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ARM中国上演夺权互撕大战:抢公章、互发
- 下一篇: python进阶-argparse