sizeof,strlen 使用總結

2021-07-10 07:36:44 字數 1498 閱讀 8401

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';

(2)sizeof()計算資料(包括陣列,變數,型別,結構體等)所佔的空間,用位元組數表示(包含'\0')

4.sizeof() 與string的注意事項

string s="hello";

sizeof(s)   //等於string型別大小4,可以使用 s.size() ,該長度與庫實現有關,與存放的字串無關,是某個固定的值

5.union 與 struct 的空間計算

(1)union 用sizeof()測總大小是最大型別的位元組大小;

(2)struct 用sizeof()測總大小應遵循兩個原則:

a,總空間是占用空間最大的型別成員所佔位元組的整數倍; 

b,資料對齊原則:資料在記憶體中按照結構構成成員先後順序進行排序,當排到該成員的時候,其前面的已擺放空間大  小必須是該成員型別大小的整數倍,否則需要補齊; 

6.sizeof不支援鏈式表示式,在預編譯期間處理。

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...