sizeof 與 strlen的區別

2021-06-22 03:37:52 字數 1680 閱讀 3972

1. sizeof的結果型別是size_t,在標頭檔案中的typedef為unsigned int型, 表示0~max int - 1

2. sizeof是運算子, strlen是函式

3. sizeof可以用型別和函式做引數,用函式做引數時,值為函式返回值型別的大小。strlen只能用char*做引數,且必須是「\0」結尾的

4. 陣列做sizeof的引數不退化,做strlen的退化為指標

5. sizeof在編譯時確定,是型別或變數的長度,可以用來定義陣列維數,是占用記憶體的大小。而strlen是執行時確定的,是字串的長度。

6. sizeof後如果是型別必須加括號,如果是變數名不用加括號

7. 當使用乙個結構型別或變數時,sizeof返回實際大小,如struct。當使用一靜態空間陣列時,sizeof返回全部陣列的尺寸,如char[100]。 sizeof不能返回返回被動態分配的陣列或外部分配的陣列尺寸

8. 陣列作為引數傳給函式時傳遞的是指標而不是陣列,傳遞的是陣列的首位址,如fun(char),fun(char[10])都等價於fun(char *)

c++中傳遞陣列永遠傳遞陣列首位址的指標,編譯器不知道陣列的大小。如果需要在函式內知道陣列大小,需要在進入函式後用memcpy將陣列複製出來,將長度用另乙個形參傳進去

fun(unsigned char *p1, int len)

9. 計算結構變數或類的大小時要考慮資料對齊,c++把結構變數成員的大小按照4或者8的倍數計算,即資料對齊,data alignment。

加上#pragma pack(n)可取消對齊

10. sizeof操作符不能用於函式型別,不完全型別或位字段。不完全型別指具有位置儲存大小資料的資料型別,如未知儲存大小的陣列型別,未知內容的結構體或聯合體,void型別

#include "stdafx.h"

#include "string.h"

class x

;class y{};

int _tmain(int argc, _tchar* argv)

;int c10 = sizeof(ss4); // 400

//int c11 = strlen(ss4);//error1error c2664: 'size_t strlen(const char *)' : cannot convert argument 1 from 'int [100]' to 'const char *'d:\users\administrator\documents\visual studio 2013\projects\6_3_6\6_3_6\6_3_6.cpp311 6_3_6

x x;

int c11 = sizeof(x);//12 記憶體對齊

int c12 = sizeof(x);//12

int c14 = sizeof(y);

//1  空類或空結構體的大小

//空類也要例項化,即在記憶體中分配一塊位址,每個例項在記憶體中都有獨一無二的位址

//這裡編譯器預設分配了乙個位元組(char),用來標記可能初始化的類例項同時所佔空間最少

//即使空類有建構函式和析構函式,它們跟sizeof也無關

//因為sizeof是針對例項的,普通的成員函式是針對類體的,乙個類的成員函式也共用相同的函式指標,不能歸為例項的大小

//如果有虛函式,要維護虛函式表,則虛函式需要占用乙個指標大小,4位元組

return 0;

}

sizeof求位元組以及與strlen的區別

例子一 根據以下條件進行計算 1 結構體的大小等於結構體內最大成員大小的整數倍 2 結構體內的成員的首位址相對於結構體首位址的偏移量是其型別大小的整數倍,比如說double型成員相對於結構體的首位址的位址 偏移量應該是8的倍數。include include using namespace std ...

C語言中的strlen與sizeof的區別

sizeof與strlen是有著本質的區別,sizeof是求資料型別所佔的空間大小,而strlen是求字串的長度,字串以 0結尾。區別如下 1 sizeof是乙個c語言中的乙個單目運算子,而strlen是乙個函式,用來計算字串的長度。2 sizeof求的是資料型別所佔空間的大小,而strlen是求字...

C語言中的strlen與sizeof的區別

sizeof與strlen是有著本質的區別,sizeof是求資料型別所佔的空間大小,而strlen是求字串的長度,字串以 0結尾。區別如下 1 sizeof是乙個c語言中的乙個單目運算子,而strlen是乙個函式,用來計算字串的長度。2 sizeof求的是資料型別所佔空間的大小,而strlen是求字...