3.sizeof結論:
sizeof()
是運算子,在標頭檔案的型別為unsigned int,其運算值在編譯時就計算好了,引數可以是指標,陣列,型別,物件和函式等。
strlen()
是函式,要在執行時才能計算。引數必須是字元型指標char*。當陣列名作為引數傳入時,實際上陣列就退化為指標了。該函式完成的功能是從代表字串第乙個位址開始遍歷,直到遇到結束符null。返回的長度大小不包括null。
char str[20] = "0123456789";
int a = strlen(str);
int b = sizeof(str);
這時的a = 10, b = 20,因為strlen計算的是字串長度,以』\0』為字串的結束標誌;而sizeof計算的是分配的資料strlen[20]所佔的記憶體空間大小,不受裡面儲存內容的影響。
int main(void)
; char str4 = "0123456789";
printf("%ld\n", sizeof(str1));
printf("%ld\n", sizeof(str2));
printf("%ld\n", sizeof(str3));
printf("%ld\n", sizeof(str4));
return 1;
}
分別輸出:4、6、8、11
str1是乙個指標,對指標進行sizeof時,其值永遠為4(32位機器,如果是64位則為8)。
str2是乙個陣列,對陣列進行sizeof時,計算的是該資料所占用的空間大小,abcde
+\0
,答案為6。
str3是乙個陣列,而str3跟str2的區別是,str3陣列的大小已經明確,所以答案為6
str4是乙個陣列,同str2,答案為11
int main(void)
sizeof(ss) = 8;
ss是乙個指標,所以是8
sizeof(*ss) = 1;
*ss是第乙個字元』0』,char型別的,所以是1
陣列--------編譯時分配的陣列空間大小;
指標--------儲存該指標所用的空間大小(32位系統為4,64位系統為8);
型別--------該型別所佔空間的大小;
物件--------物件的實際占用空間大小;
函式--------函式的返回型別所佔的空間大小,返回值型別不能是void;
c c sizeof 和strlen的區別
sizeof是乙個操作符,strlen是庫函式 sizeof的引數可以是資料的型別,也可以是變數,二strlen只能是以 0 的字串做引數。編譯器再編譯時就計算出了sizeof的結果,而strlen函式必須再執行時才能計算出來。並且sizeof計算的是資料型別佔記憶體的大小 位元組數 而strlen...
sizeof和strlen和 countof的區別
運算子,計算引數所佔記憶體 int nnum2 strlen arr 是函式,求字元的個數,不包括 0 int nnum3 countof arr windows巨集 計算陣列的元素個數 cout nnum1 cout nnum2 cout nnum3 endl int arr1 20 nnum1 ...
sizeof和strlen的區別
sizeof與strlen的區別與聯絡 轉 1.sizeof操作符的結果型別是size t,它在標頭檔案中typedef為unsigned int型別。該型別保證能容納實現所建立的最大物件的位元組大小。2.sizeof是算符,strlen是函式。3.sizeof可以用型別做引數,strlen只能用c...