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