sizeof strlen區別與聯絡

2021-06-09 05:21:10 字數 1870 閱讀 8366

1.sizeof是運算子,strlen是函式,具體如下:

sizeof

strlen

標頭檔案:stddef.h

格式:1) sizeof( object ); // sizeof( 物件 );

2) sizeof( type_name ); // sizeof( 型別 );

3) sizeof object; // sizeof 物件

功能:乙個物件或者型別所佔的記憶體位元組數;

說明:sizeof操作符的結果型別是size_t,typedef unsigned int size_t;

原型:extern unsigned int strlen(char *s);

標頭檔案:string.h

格式:strlen (字元陣列名)

功能:計算字串s的(unsigned int型)長度,不包括'\0'在內

說明:返回s的長度,不包括結束符null。

2.strlen只能用char*做引數,且必須是以''\0''結尾的,而sizeof可用型別做引數,還可用函式做引數,如: 

int sum();

printf("%d\n", sizeof(sum()));//輸出的結果是sizeof(int),即4。

3.陣列做sizeof的引數不退化,傳遞給strlen就退化為指標了。

4.大部分編譯程式,sizeof在編譯時確定,因此sizeof(x)可以用來定義陣列維數;而strlen要在執行時才能計算出來,用來計算字串的長度,而不是型別佔記憶體的大小;

char str[20]="0123456789";

int len1=strlen(str); //len1=10;

int len2=sizeof(str); //len2=20;

5.sizeof後,若為型別必須加括弧,若為變數名可以不加括弧。這是因為sizeof是個操作符不是個函式。

6.當適用於乙個結構型別時或變數, sizeof 返回實際的大小;當適用一靜態地空間陣列,sizeof 歸還全部陣列的尺寸。

sizeof 操作符不能返回動態地被分派了的陣列或外部的陣列的尺寸;

7.陣列作為引數傳給函式時傳的是指標而不是陣列,傳遞的是陣列的首位址,

如: fun(char [8])

fun(char )

都等價於 fun(char *) 

在c++裡引數傳遞陣列永遠都是傳遞指向陣列首元素的指標,編譯器不知道陣列的大小,如果想在函式內知道陣列的大小, 需要這樣做:

進入函式後用memcpy拷貝出來,長度由另乙個形參傳進去 

fun(unsiged char *p1, int len)

常在用到 sizeof 和 strlen 的時候,通常是計算字串陣列的長度,如果是對指標,結果則會不一樣的:

char* str = "abacd";

sizeof(str) //結果 4 --->str是指向字串常量的字元指標,sizeof 獲得的是乙個指標所佔的空間,應該是長整型的,所以是4;

sizeof(*str) //結果 1 --->*str是第乙個字元,其實就是字串的第一位'a' 所佔的記憶體空間,是char型別的,佔了 1 位;

strlen(str)= 5 //--->若要獲得這個字串的長度,則一定要使用 strlen

原文:

sizeof,strlen總結比較

其實理解 sizeof 只需要抓住乙個要點 棧 程式儲存分布有三個區域 棧 靜態和動態。所有能夠從 直接操作的物件,包括任何型別的變數 指標,都是在棧上的 動態和靜態儲存區是靠棧上的指標間接操作的。sizeof 操作符,計算的是物件在棧上的投影體積 記住這個就很多東西都很清楚了。char const...

sizeof,strlen 使用總結

1.sizeof是一種操作符,對變數或者物件可以不加括號,但是型別,必須加括號 2.指標與陣列sizeof 使用 1 指標也屬於一種變數型別 32位作業系統下是4位元組,64位作業系統是8位元組 例1 char p int length1 sizeof p length1 4 或 length1 8...

十六進製制,sizeof,strlen

今天看到了sizeof的問題,發現基礎有些都記不牢了,現在把它們都記下 一 函式說明 sizeof是運算子,strlen是函式 1.sizeof 標頭檔案 stddef.h格式 1 sizeof object sizeof 物件 2 sizeof type name sizeof 型別 3 size...