1、基本定義
sizeof():
首先sizeof()在c語言中是一種單目運算子,在編譯的時候就進行計算,它的作用是用來計算出物件所佔的位元組數,通常用來檢視變數、陣列或結構體等所佔的位元組個數。其中物件的位元組個數與具體的操作平台有直接的關係。
括號裡的
引數可以是陣列、指標、型別、物件、函式等。
而且它不能用來返回動態分配的記憶體空間的大小。實際上,用sizeof來返回型別以及靜態分配的物件、結構或陣列所佔的空間,返回值跟物件、結構、陣列所儲存的內容是沒有關係。具體語法及舉例在後面附著。
strlen():
strlen()是函式,要在執行時才計算,它的作用
返回字串的長度。該字串可以是自己定義的,也可能是記憶體中隨機的,該函式實際完成的功能是從代表該字串的第乙個位址開始遍歷,直到遇到結束符null。返回的長度大小不包括null。
括號裡的引數必須是字元型指標(char *)。當陣列名作為引數傳入時,實際上陣列就退化成指標了。
2、具體的語法及舉例
sizeof()有三種語法形式,如下:
1) sizeof ( object ) ; // sizeof( 物件 ) ; sizeof ( i );
2) sizeof ( type_name ); // sizeof( 型別 ) ; sizeof ( int ); sizeof int ;
3) sizeof object; // sizeof 物件 ; sizeof i ;
char * str1 = "jl"; 解析:str1在這裡是
指標,在這裡不是指字串佔的空間,而是乙個字元型指標所佔的空間,指標佔4個位元組。
sizeof (str1) = 4. => sizeof (str1) =sizeof (char *)=4.
char str2[ ]= "jl"; 解析:str2是字元型
陣列,對於陣列而言,返回的是這個陣列所佔的總的空間,陣列的屁股後面還跟有'\0'。
sizeof (str2) = 3. => sizeof (str2) => =3.
char str3 [ 8 ]= ; 解析:str3是
定義了長度
為8的陣列
。因此
sizeof (str3) = 8.
char ss[ ] = "012345" ; 解析:這個類似於第二種情況。sizeof ( ss )= 7 => sizeof ( ss )= =7.
在這裡,重點提出對於指標,sizeof()返回的是該指標所佔的空間,一般為4個位元組。但是對於陣列而言,返回陣列所有元素佔的總空間,(包括'\0').特別地對於結構體而言,sizeof()要滿足位元組對齊。位元組對齊就是結構體的總大小為結構體最寬基本型別成員大小的整數倍。
而且空結構體的sizeof()為1,不是0.
對於strlen()不區分是陣列還是指標,就讀到\0為止返回長度。而且strlen是不把\0計入字串的長度的.
strlen()源**如下:
#include
方法一、利用中間變數(計數)
int strlen (const char * str)
return i;
}void main()
方法二、不借助計數變數
int strlen (const char * str)
void main()
方法三、利用指標的加減法
int strlen ( char * str)
return p - str ;
}void main()
歡迎讀者批評指正。
sizeof 與 strlen 的區別
一 示例 eg1 下列 char buffer 256 char pbuffer buffer cout sizeof buffer cout sizeof pbuffer 其執行結果為 eg2 簡單說明 sizeof gives the amount of storage,in bytes,ass...
strlen與sizeof的區別
1.sizeof操作符的結果型別是size t,它在標頭檔案中typedef為unsigned int型別。該型別保證能容納實現所建立的最大物件的位元組大小。2.sizeof是算符,strlen是函式。3.sizeof可以用型別做引數,strlen只能用char 做引數,且必須是以 0 結尾的。4....
sizeof與strlen的區別
sizeof 表示式 是c c 關鍵字 不是函式 功能 返回 表示式 結果所佔機器 位元組 的大小。strlen 字串 是c c 標準庫的函式 不是關鍵字 在標頭檔案 string.h 中宣告。功能 計算 字串 中的 0 之前的字元個數。特別注意 strlen總是假定傳給它的引數是以null結束符 ...