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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

解析C语言中的sizeof

發(fā)布時(shí)間:2023/11/27 生活经验 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 解析C语言中的sizeof 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

?

一、sizeof的概念?
  sizeof是C語言的一種單目操作符,如C語言的其他操作符++、--等。它并不是函數(shù)。sizeof操作符以字節(jié)形式給出了其操作數(shù)的存儲(chǔ)大小。操作數(shù)可以是一個(gè)表達(dá)式或括在括號(hào)內(nèi)的類型名。操作數(shù)的存儲(chǔ)大小由操作數(shù)的類型決定。?

二、sizeof的使用方法?
  1、用于數(shù)據(jù)類型?

  sizeof使用形式:sizeof(type)?

  數(shù)據(jù)類型必須用括號(hào)括住。如sizeof(int)。?

  2、用于變量?

  sizeof使用形式:sizeof(var_name)或sizeof?var_name?

  變量名可以不用括號(hào)括住。如sizeof?(var_name),sizeof?var_name等都是正確形式。帶括號(hào)的用法更普遍,大多數(shù)程序員采用這種形式。?

  注意:sizeof操作符不能用于函數(shù)類型,不完全類型或位字段。不完全類型指具有未知存儲(chǔ)大小的數(shù)據(jù)類型,如未知存儲(chǔ)大小的數(shù)組類型、未知內(nèi)容的結(jié)構(gòu)或聯(lián)合類型、void類型等。?

  如sizeof(max)若此時(shí)變量max定義為int?max(),sizeof(char_v)?若此時(shí)char_v定義為char?char_v?[MAX]且MAX未知,sizeof(void)都不是正確形式。?

三、sizeof的結(jié)果?
  sizeof操作符的結(jié)果類型是size_t,它在頭文件<stddef.h>中typedef為unsigned?int類型。該類型保證能容納實(shí)現(xiàn)所建立的最大對象的字節(jié)大小。?

  1、若操作數(shù)具有類型char、unsigned?char或signed?char,其結(jié)果等于1。?

  ANSI?C正式規(guī)定字符類型為1字節(jié)。?

  2、int、unsigned?int?、short?int、unsigned?short?、long?int?、unsigned?long?、float、double、long?double類型的sizeof?在ANSI?C中沒有具體規(guī)定,大小依賴于實(shí)現(xiàn),一般可能分別為2、2、2、2、4、4、4、8、10。?

  3、當(dāng)操作數(shù)是指針時(shí),sizeof依賴于編譯器。例如Microsoft?C/C++7.0中,near類指針字節(jié)數(shù)為2,far、huge類指針字節(jié)數(shù)為4。一般Unix的指針字節(jié)數(shù)為4。?

  4、當(dāng)操作數(shù)具有數(shù)組類型時(shí),其結(jié)果是數(shù)組的總字節(jié)數(shù)。?

  5、聯(lián)合類型操作數(shù)的sizeof是其最大字節(jié)成員的字節(jié)數(shù)。結(jié)構(gòu)類型操作數(shù)的sizeof是這種類型對象的總字節(jié)數(shù),包括任何墊補(bǔ)在內(nèi)。?

  讓我們看如下結(jié)構(gòu):?

  struct?{char?b;?double?x;}?a;?

  在某些機(jī)器上sizeof(a)=12,而一般sizeof(char)+?sizeof(double)=9。?

  這是因?yàn)榫幾g器在考慮對齊問題時(shí),在結(jié)構(gòu)中插入空位以控制各成員對象的地址對齊。如double類型的結(jié)構(gòu)成員x要放在被4整除的地址。?

  6、如果操作數(shù)是函數(shù)中的數(shù)組形參或函數(shù)類型的形參,sizeof給出其指針的大小。?

四、sizeof與其他操作符的關(guān)系?
  sizeof的優(yōu)先級(jí)為2級(jí),比/、%等3級(jí)運(yùn)算符優(yōu)先級(jí)高。它可以與其他操作符一起組成表達(dá)式。如i*sizeof(int);其中i為int類型變量。?

五、sizeof的主要用途?
  1、sizeof操作符的一個(gè)主要用途是與存儲(chǔ)分配和I/O系統(tǒng)那樣的例程進(jìn)行通信。例如:?

  void?*malloc(size_t?size),?

  size_t?fread(void?*?ptr,size_t?size,size_t?nmemb,FILE?*?stream)。?

  2、sizeof的另一個(gè)的主要用途是計(jì)算數(shù)組中元素的個(gè)數(shù)。例如:?

  void?*?memset(void?*?s,int?c,sizeof(s))。?

六、建議?
  由于操作數(shù)的字節(jié)數(shù)在實(shí)現(xiàn)時(shí)可能出現(xiàn)變化,建議在涉及到操作數(shù)字節(jié)大小時(shí)用ziseof來代替常量計(jì)算。

總結(jié)

以上是生活随笔為你收集整理的解析C语言中的sizeof的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。