引用這篇文章
一、sizeof
sizeof(...)
是運算子,在標頭檔案中typedef
為unsigned int
,其值在編譯時即計算好了,引數可以是陣列、指標、型別、物件、函式等。
它的功能是:獲得保證能容納實現所建立的最大物件的位元組大小。
由於在編譯時計算,因此sizeof
不能用來返回動態分配的記憶體空間的大小。實際上,用sizeof
來返回型別以及靜態分配的物件、結構或陣列所佔的空間,返回值跟物件、結構、陣列所儲存的內容沒有關係。
具體而言,當引數分別如下時,sizeof
返回的值表示的含義如下:
陣列——
編譯時分配的陣列空間大小;
指標——
儲存該指標所用的空間大小(儲存該指標的位址的長度,是長整型,應該為4
);型別——
該型別所佔的空間大小;
物件——
物件的實際占用空間大小;
函式——
函式的返回型別所佔的空間大小。函式的返回型別不能是void
。**************
二、strlen
strlen(...)
是函式,要在執行時才能計算。引數必須是字元型指標(char*
)。當陣列名作為引數傳入時,實際上陣列就退化成指標了。
它的功能是:返回字串的長度。該字串可能是自己定義的,也可能是記憶體中隨機的,該函式實際完成的功能是從代表該字串的第乙個位址開始遍歷,直到遇到結束符null
。返回的長度大小不包括null
。*****************
測試程式:
#include "iostream"
using namespace std;
int main()
{ int a= 100;
char c = 'c';
char var = "123456";
char *p = "123456";
char *q = new char[100];
q[50] = 0;
cout<
執行結果:
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是求字...