A. 參數(shù)為數(shù)據(jù)類型或者為一般變量。例如sizeof(int),sizeof(long)等等。這種情況要注意的是不同系統(tǒng)系統(tǒng)或者不同編譯器得到的結(jié)果可能是不同的。例如int類型在16位系統(tǒng)中占2個字節(jié),在32位系統(tǒng)中占4個字節(jié)。
B. 參數(shù)為數(shù)組或指針。下面舉例說明.
int a[50]; //sizeof(a)=4*50=200; 求數(shù)組所占的空間大小int *a=new int[50];// sizeof(a)=4; a為一個指針,sizeof(a)是求指針 //的大小,在32位系統(tǒng)中,當然是占4個字節(jié)。C. 參數(shù)為結(jié)構(gòu)或類。Sizeof應(yīng)用在類和結(jié)構(gòu)的處理情況是相同的。 但有兩點需要注意: 第一、結(jié)構(gòu)或者類中的靜態(tài)成員不對結(jié)構(gòu)或者類的大小產(chǎn)生影響,因為靜態(tài)變量的存儲位置與結(jié)構(gòu)或者類的實例地址無關(guān)。 第二、沒有成員變量的結(jié)構(gòu)或類的大小為1,因為必須保證結(jié)構(gòu)或類的每一個實例在內(nèi)存中都有唯一的地址。
舉例:
Class Test{int a;static double c};//sizeof(Test)=4.Test *s;//sizeof(s)=4,s為一個指針。Class test1{ };//sizeof(test1)=1;D. 參數(shù)為其他。下面舉例說明。
int func(char s[5]);{ cout<<sizeof(s); //這里將輸出4,本來s為一個數(shù)組,但由于做為函數(shù)的參數(shù)在傳遞的時候系統(tǒng)處理為一個指針, //所以sizeof(s)實際上為求指針的大小。 return 1;}sizeof(func(“1234”))=4 //因為func的返回類型為int,所以相當于求sizeof(int).以上為sizeof的基本用法,在實際的使用中要注意分析gcc的分配變量的分配策略,這樣的話可以避免一些錯誤。
新聞熱點
疑難解答