sizeof與strlen.md
阿新 • • 發佈:2018-12-12
**sizeof與strlen的區別: **
下面以程式碼的形式來解釋
#include <iostream> using namespace std; int main() { cout << sizeof(int) <<"\t"<<sizeof(double)<< endl; int x = 3; cout << sizeof(x) << endl; //cout << strlen(4) << endl; //error: strlen只能以\0結尾的引數作為引數 cout << strlen("abc123d") << endl; // 系統會自動加個'\0'作為結束符 int arr[] = { 1,2,3 }; cout << sizeof(arr) << endl; // 陣列作為sizeof引數時,不退化 //cout << strlen(arr) << endl; // error:陣列作為strlen的引數時,退化為指標,指標是一種普通的變數,從訪問上不異與其他變數。 //它儲存的數值是整型型別,和整型資料不同的是,它指向的是一段記憶體地址。所以不是以‘\0’結束的字串,所以報錯 /* 兩者區別: sizeof是一個運算元,而strlen是庫函式 sizeof的引數可以是資料的型別也可以是變數,而strlen的引數只能是以'\0'為結尾的字串 編譯器在編譯時期就計算出了sizeof的結果,而strlen函式必須在執行時才能計算出來 sizeof計算的是型別所佔記憶體的大小,而strlen計算的是字串實際的長度 陣列作sizeof的引數不退化,而傳遞給strlen作引數就退化為指標了 */ return 0; }