1.有關int,short,long,float,double,char等取sizeof問題:一般來說
sizeof(int) = 4;
sizeof(short) = 2;
sizeof(long) = 4;
sizeof(char) = 1;
sizeof(float) = 4;
sizeof(double) = 8;
2.對於struct,當結構體的元素的長度小於處理器位數(32位 = 4位元組)時,便以結構體中最長的資料元素為對齊條件。例:
執行結果如下:
在結構體a中,a的大小為1,b的大小為4,c的大小也為4, a按4位元組對齊,所以結構體a的大小為3*4=12位元組
3.對於陣列及指標,
int a[20] ; sizeof(a) = 20 * sizeof(int) = 80 對於陣列計算的是陣列的全部大小;
int* a = new int[20];sizeof(a) = 4 對指標大小進行計算;
char str="012345";sizeof(str) = 7包含隱含的'/0',轉義字元算乙個位元組;
4.對於位域,乙個位元組 = 8bit,元素按照乙個位元組進行對齊,
執行結果如下:
100的2進製是1100100,去掉後面5位餘11放入x.s3中,所以結果是3。
注意:對於聯合體,取其中最大的元素作為聯合的大小,見第6條
5.對於空的類
class a {}; sizeof(a) = 1; 預設空類是有乙個佔位符的,但是如果類中有虛函式,如下:
sizeof(a)=4;sizeof(b) =4; 任何含有虛函式的類都擁有乙個vptr指標,用來指向虛函式表vtable。sizeof(vptr) = 4。
注意:class a; sizeof(a) = 1; 對於靜態成員變數是分配在全域性儲存區的,所以a還是相當於空類。
class c:public virtual a {}; sizeof(c)=4; 對於虛擬繼承的類擁有虛函式表,所以空類c含有vptr.
6.對於聯合體,取其中最大的元素作為聯合的大小
7.使用malloc或者new 分配記憶體,void *pp = malloc(10); sizeof(p) = 4; 跟指標一樣,sizeof 只能測出靜態陣列的長度,無法檢測動態分配的或外部陣列大小
8.下面函式輸出結果:對於char str[100]或者char str 引數都退化為char* str,這樣的函式即使傳入char s[10] 也是可以的
結果:sizeof( char* ) = 4;
為什麼是這樣結果呢,因為陣列傳參時,相當於把陣列的首指標傳遞給形參,也就相當於傳遞的引數是char* str,因此結果是指標的大小,那麼如何強制str為100位陣列?可以如此宣告char ( &str )[100];
理解順序:第一、str宣告為乙個引用;第
二、引用乙個100元素陣列;第
三、陣列元素每個為int大小。
結果:100*sizeof(char) = 100
strlen於sizeof相關問題
關於strlen於sizeof列印方面的問題 include include int main p是用來列印指標變數 列印的是乙個陣列 指標 1位址跳過乙個元素 取決於元素的sizeof printf p n arr arr隱式轉為指標,指向首元素的位址 printf p n arr 1 print...
virtualbox相關問題系列
1 centos和windows共享檔案,首先安裝virtualbox的增強功能。在裝置 共享資料夾 設定windows的共享檔案。設定好後再centos裡面,最好在 mnt下建立共享資料夾。最後建立虛擬機器和宿主機的共享資料夾的連線,連線命令如下 mount t vboxsf vmshare mn...
多執行緒相關系列博文
多執行緒是程式開發過程中用的比較多的,平時開發也就用下互斥鎖,關鍵 段,讀寫鎖之類的。基本也就能解決問題了。但如果別人問到具體細節,有種理不清的感覺,說到底還是基礎不紮實。參考幾篇博文。加深理解。秒殺多執行緒系列 windows c 11併發實戰 如何理解互斥鎖和訊號量,以及他們在系統程式設計中是如...