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只關心存儲的數據內容,不關心空間的大小和類型。