日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

sizeof你真的弄明白了吗?

發布時間:2023/12/20 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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你真的弄明白了吗?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。