sizeof用法總結(jié)

基本概念:運(yùn)算符,用于計(jì)算一個(gè)變量或數(shù)據(jù)類(lèi)型的長(zhǎng)度(在棧中分配的大小),以字節(jié)為單位。

在處理指針和數(shù)組上的特性

sizeof(數(shù)組首地址),得到輸出數(shù)組所占地址空間的大??;
sizeof(指針)該系統(tǒng)中地址的字節(jié)寬度(32位為4);
如果是通過(guò)函數(shù)傳遞過(guò)的地址,會(huì)把數(shù)組首地址和指針無(wú)差別看做地址;

void test_sizeof_addr(char *a)
{
    printf("%d\n", sizeof(a));  //4
}
void test_sizeof_array(char a[])
{
    printf("%d\n", sizeof(a));//4
}
int main()
{
    char b[30];
    c=sizeof(b);// 30;
    test_sizeof_addr(b);
    test_sizeof_array(b);
 
    return 0;
}

處理字符串和字符數(shù)組上的特性

char *s1="0123456789"; //sizeof(s1)=4;
char s2[]=“0123456789”;//sizeof(s2)=11*1;
char s3[100]="0123456789";//sizeof(s3)=100*1;

10個(gè)特性

(0)sizeof是運(yùn)算符,不是函數(shù);
(1)sizeof不能求得void類(lèi)型的長(zhǎng)度;
(2)sizeof求得void類(lèi)型的指針的長(zhǎng)度;
(3)sizeof求得靜態(tài)分配內(nèi)存的數(shù)組的長(zhǎng)度!
(4)sizeof不能求得動(dòng)態(tài)分配的內(nèi)存的大小!
(5)sizeof不能對(duì)不完整的數(shù)組求長(zhǎng)度;
(6)當(dāng)表達(dá)式作為sizeof的操作數(shù)時(shí),它返回表達(dá)式的計(jì)算結(jié)果的類(lèi)型大小,但是它不對(duì)表達(dá)式求值!
(7)sizeof可以對(duì)函數(shù)調(diào)用求大小,并且求得的大小等于返回類(lèi)型的大小,但是不執(zhí)行函數(shù)體!
(8)sizeof求得的結(jié)構(gòu)體(及其對(duì)象)的大小并不等于各個(gè)數(shù)據(jù)成員對(duì)象的大小之和!
(9)sizeof不能用于求結(jié)構(gòu)體的位域成員的大小,但是可以求得包含位域成員的結(jié)構(gòu)體的大??!

位域

作用:壓縮存儲(chǔ)
格式:type [var] : digits;
type只能是int,unsigned int,signed int,char,unsigned char五種類(lèi)型中的一種;
digits大小不能超過(guò)type類(lèi)型占用的大??;
不能對(duì)其取地址;
無(wú)名位段的填充作用;
出現(xiàn)在表達(dá)式中,整型提升;
規(guī)則:

  1. 如果相鄰位域字段的類(lèi)型相同,且其位寬之和小于類(lèi)型的sizeof大小,則后面的字段將緊鄰前一個(gè)字段存儲(chǔ),直到不能容納為止;
  2. 如果相鄰位域字段的類(lèi)型相同,但其位寬之和大于類(lèi)型的sizeof大小,則后面的字段將從的存儲(chǔ)單元開(kāi)始,其偏移量為其類(lèi)型大小的整數(shù)倍;
  3. 如果相鄰的位域字段的類(lèi)型不同,則各編譯器的具體實(shí)現(xiàn)有差異,經(jīng)實(shí)驗(yàn)VC采取不壓縮方式,即即使前一個(gè)字段有空余位足夠容納后一個(gè)字段,后一個(gè)字段也沒(méi)有空余位,從前一個(gè)字段類(lèi)型大小之后的新字節(jié)開(kāi)始存儲(chǔ);
  4. 如果位域字段之間穿插著非位域字段,則不進(jìn)行壓縮;
  5. 整個(gè)結(jié)構(gòu)體的總大小為最寬基本類(lèi)型成員大小的整數(shù)倍。:
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容