【語法】sizeof和strlen

http://blog.csdn.net/niushuai666/article/details/7677210


一、sizeof

sizeof(…)是運算符,而不是一個函數。

其值在編譯時即計算好了。
由於在編譯時計算,因此sizeof不能用來返回動態分配的內存空間的大小。

具體而言,當參數分別如下時,sizeof返回的值表示的含義如下:
數組——編譯時分配的數組空間大小;
指針——存儲該指針所用的空間大小(存儲該指針的地址的長度,是長整型,應該爲4);
類型——該類型所佔的空間大小;
對象——對象的實際佔用空間大小;
函數——函數的返回類型所佔的空間大小。函數的返回類型不能是void。


二、strlen

strlen(…)是函數,要在運行時才能計算。

參數必須是字符型指針(char*), 且必須是以’\0’結尾的。
當數組名作爲參數傳入時,實際上數組就退化成指針了。

char arr[10] = "Hello";
int len_one = strlen(arr);
int len_two = sizeof(arr); 
cout << len_one << " and " << len_two << endl; 

輸出結果爲:5 and 10

sizeof返回定義arr數組時,編譯器爲其分配的數組空間大小,不關心數組裏面的數據
strlen只關心存儲的數據內容,不關心空間的大小和類型。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章