(以下全摘自網路,侵刪致歉)
在 c 語言中,sizeof() 是乙個判斷資料型別或者表示式長度的運算子,對 sizeof() 的處理在編譯階段進行。
作用 判斷資料型別長度符的關鍵字
過程 位元組數的計算在程式編譯時進行
返回值 記憶體所佔位元組數
sizeof是c/c++中的乙個操作符(operator),簡單的說其作用就是返回乙個物件或者型別所佔的記憶體位元組數。
sizeof有兩種語法形式,如下:
sizeof(type_name);//sizeof(型別);
sizeof object;//sizeof物件;
所以,int i;
sizeof(i);//ok
sizeof i;//ok
sizeof(int);//ok
sizeof int;//error
sizeof計算物件的大小也是轉換成對物件型別的計算,也就是說,同種型別的不同物件其sizeof值都是一致的。sizeof對乙個表示式求值,編譯器根據表示式的最終結果型別來確定大小,一般不會對表示式進行計算。
strlen計算字串的具體長度,sizeof計算宣告後所佔的記憶體數。
strlen所作的是乙個計數器的工作,它從記憶體的某個位置(可以是字串開頭,中間某個位置,甚至是某個不確定的記憶體區域)開始掃瞄,直到碰到第乙個字串結束符'\0'為止,然後返回計數器值(長度不包含'\0')。
標頭檔案 string.h(c)或cstring(c++)
格式 strlen(字元指標表示式)
功能 計算給定字串的長度
返回值 給定字串(不包括「\0」)長度
strlen(char*)函式求的是字串的實際長度,它求得方法是從開始到遇到第乙個'\0',如果你只定義沒有給它賦初值,這個結果是不定的,它會從aa首位址一直找下去,直到遇到'\0'停止。
strlen與sizeof的區別:
strlen計算字串的具體長度(只能是字串),不包括字串結束符。返回的是字元個數。
sizeof計算宣告後所佔的記憶體數(位元組大小),不是實際長度。
sizeof是乙個取位元組運算子,而strlen是個函式。
sizeof的返回值=字元個數*字元所佔的位元組數,字元實際長度小於定義的長度,此時字元個數就等於定義的長度。若未給出定義的大小,分類討論,對於字串陣列,字元大 小等於實際的字元個數+1;對於整型陣列,字元個數為實際的字元個數。字串每個字元佔1個位元組,整型資料每個字元佔的位元組數需根據系統的位數類確定,32位佔4個位元組。
sizeof是運算子,在標頭檔案中typedef為unsigned int,其值在編譯時即計算好了,引數可以是陣列、指標、型別、物件、函式等。它的功能是:獲得保證能容納實現所建立的最大物件的位元組大小。
由於在編譯時計算,因此sizeof不能用來返回動態分配的記憶體空間的大小。實際上,用sizeof來返回型別以及靜態分配的物件、結構或陣列所佔的空間,返回值跟物件、結構、陣列所儲存的內容沒有關係。
strlen所作的僅僅是乙個計數器的工作,它從記憶體的某個位置(可以是字串開頭,中間某個位置,甚至是某個不確定的記憶體區域)開始掃瞄,直到碰到第乙個字串結束符'\0'為止,然後返回計數器值(長度不包含'\0')。c語言中判斷資料型別或者表示式長度符;不是乙個函式,位元組數的計算在程式編譯時進行,而不是在程式執行的過程中才計算出來。
(24)位運算子 sizeof運算子
位運算子作用於整數型別,並把運算物件看成是二進位制的集合。位運算子提供檢查和設定二進位制位的功能,滿足左結合律。但是位運算關於符號位如何處理沒有明確的規定,改變符號位的值是一種未定義的行為,所以建議僅將位運算子作用於無符號 型。左移運算子 右移運算子 的行為則依賴於其左側運算物件物件的型別 如果該運...
sizeof運算子和strlen函式的區別
1 sizeof是運算子,而strlen是函式。2 sizeof操作符的運算結果為size t,他在標頭檔案中的typedef為unsigned int。該型別保證能容納所操作物件的最大位元組大小。3 sizeof可以用型別做引數,而strlen只能用char 做引數,且必須是以 0 結尾。4 陣列...
sizeof運算子詳解
1 sizeof應用在結構上的情況 請看下面的結構 struct mystruct 對結構mystruct採用sizeof會出現什麼結果呢?sizeof mystruct 為多少呢?也許你會這樣求 sizeof mystruct sizeof double sizeof char sizeof in...