天天看點

sizeof的那些事兒

sizeof的那些事兒

sizeof是一個坑,但它幾乎是筆試的必考題,是以有必要整理一下。首先要說明的是,sizeof傳回的機關是位元組(Byte)

———————————————–

字元串、字元數組的sizeof

char* ss1 = "0123456789";
char ss2[] = "0123456789";
char ss3[100] = "0123456789";
int ss4[100];

cout << sizeof(ss1) << endl; //8(我的是64位機)
cout << sizeof(ss2) << endl; //11
cout << sizeof(ss3) << endl; //100
cout << sizeof(ss4) << endl; //400      

ss1 是一個字元指針,指針指向的是第一個字元,*ss1的值是0。一個字元占1位元組,但是字元指針占8位元組。32位機是4位元組。

關于32位和64位的差別,請見​這篇文章

ss2 是一個字元數組,這個數組的大小由字元的數量決定,一個字元占1位元組,再加上末尾隐含的’\0’,是以是11個位元組

ss3 也是一個字元數組,它的大小在定義時就給出了,是以是100位元組(100 * 1)

ss4 是一個整型數組,由于每個整型變量占用4位元組,是以它的大小是400位元組(100 * 4)

char q1[] = "abc";
char q2[] = "a\n";
char* q3 = "a\n";

cout << sizeof(q1) << endl; // 4
cout << sizeof(q2) << endl; // 3
cout << sizeof(q3) << endl; // 8      

———————————————–

結構體的sizeof(考點:記憶體對齊)

  1. 對于n位元組的元素,它的首位址要能被n整除
  2. 結構體的總長度是最長元素的整數倍

繼續閱讀