C C sizeof和strlen的區別總結

2021-10-09 14:59:44 字數 1298 閱讀 8349

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