1.sizeof是一種操作符,對變數或者物件可以不加括號,但是型別,必須加括號;
2.指標與陣列sizeof()使用:
(1) 指標也屬於一種變數型別(32位作業系統下是4位元組,64位作業系統是8位元組):
例1:char *p;
int length1=sizeof(p) ; // length1=4 或 length1=8;
int length2=sizeof(*p ) // length2=1;
(2)對於陣列,sizeof 可以直接計算陣列大小,包括結束符'\0':
例2: int a[10];
char b[ ]="hello";
int length1=sizeof(a) // length1=40;
int length2=sizeof(b) // length2=6;
(3)在函式傳遞引數中,陣列作形參時,陣列名稱當作指標使用
void fun( char a[ ])
3.與strlen()比較
(1)strlen只能計算字元陣列的字元數,不包含'\0';4.sizeof() 與string的注意事項(2)sizeof()計算資料(包括陣列,變數,型別,結構體等)所佔的空間,用位元組數表示(包含'\0')
string s="hello";
sizeof(s) //等於string型別大小4,可以使用 s.size() ,該長度與庫實現有關,與存放的字串無關,是某個固定的值
5.union 與 struct 的空間計算
(1)union 用sizeof()測總大小是最大型別的位元組大小;6.sizeof不支援鏈式表示式,在預編譯期間處理。(2)struct 用sizeof()測總大小應遵循兩個原則:
a,總空間是占用空間最大的型別成員所佔位元組的整數倍;
b,資料對齊原則:資料在記憶體中按照結構構成成員先後順序進行排序,當排到該成員的時候,其前面的已擺放空間大 小必須是該成員型別大小的整數倍,否則需要補齊;
int a = 0;
cout<7.經典例子:
double* (*a)[3][6]; //假如指標使用4個位元組儲存
sizeof(a); //a為指標, 4
sizeof(*a); // *a 為乙個有3 * 6個指標元素的陣列 ,72
sizeof(**a); // **a為有 6個指標型別的一維陣列元素 ,24
sizeof(***a); //***a 為乙個指標型別的陣列元素 , 4
sizeof(****a): //****a 為乙個double 型別的變數 , 8
sizeof,strlen總結比較
其實理解 sizeof 只需要抓住乙個要點 棧 程式儲存分布有三個區域 棧 靜態和動態。所有能夠從 直接操作的物件,包括任何型別的變數 指標,都是在棧上的 動態和靜態儲存區是靠棧上的指標間接操作的。sizeof 操作符,計算的是物件在棧上的投影體積 記住這個就很多東西都很清楚了。char const...
sizeof strlen區別與聯絡
1.sizeof是運算子,strlen是函式,具體如下 sizeof strlen 標頭檔案 stddef.h 格式 1 sizeof object sizeof 物件 2 sizeof type name sizeof 型別 3 sizeof object sizeof 物件 功能 乙個物件或者型...
十六進製制,sizeof,strlen
今天看到了sizeof的問題,發現基礎有些都記不牢了,現在把它們都記下 一 函式說明 sizeof是運算子,strlen是函式 1.sizeof 標頭檔案 stddef.h格式 1 sizeof object sizeof 物件 2 sizeof type name sizeof 型別 3 size...