天天看點

sizeof 了解 原理 本質 用法sizeof 是什麼sizeof 在什麼時候調用sizeof 基本用法參考部落格

sizeof 原理和用法

  • sizeof 是什麼
  • sizeof 在什麼時候調用
  • sizeof 基本用法
  • 參考部落格

sizeof 是什麼

sizeof 不是操縱符,也不是函數,因為在運作階段沒有它,它沒有被編譯成機器

指令。可以把它看做一個宏。

sizeof 在什麼時候調用

sizeof 在編譯期間就處理完成了。是以像size(a=3)這種,a是不會被指派的。

a還是原來的值。

cout<<sizeof(a=3)<<endl;
\\等價于下面:
cout<<sizeof(a的類型)<<endl;
\\(假設a的類型為int)等價于下面:
cout<<sizeof(int)<<endl;
\\實際上編譯器看到的是下面的:
cout<<4<<endl;
\\是以說編譯器才看不到你的指派呢,賦個鬼喲
           

sizeof 基本用法

在了解了sizeof這些原理後,基本用法就好了解,隻要把握好它作用在編譯階段就不會出錯

sizeof 作用于類型,作用于基本類型就沒什麼好說的拉

sizeof 作用于變量,決定于變量的類型就好了。

sizeof 作用于函數,決定于函數的傳回值,形式:sizeof(func(形參)),函數并不會被調用

sizeof 作用于結構體,基本類型相加,注意位元組對齊。

#include <iostream>
using namespace std;
struct test{//定義一個結構體測試
    int a;
    char b;
};
int main(){
    struct test test_my;
    test_my.a=0;
    test_my.b='1';
    cout<<"sizeof(test_my)"<<sizeof(test_my)<<endl;//位元組對齊,結果為8,而不是4(int)+1(char)=5
    cout<<"sizeof(test_my.a=3)"<<sizeof(test_my.a=3)<<endl;//結果為4,test_my.a為int型,是以為4,注意這裡的指派無效
    cout<<"\n and a= "<<test_my.a<<endl;//test_my.a為0,而不是3,sizeof(test_my.a=3)沒有被編譯
}
           

參考部落格

https://blog.csdn.net/u010003835/article/details/47170267

繼續閱讀