1. 程式人生 > >sizeof與strlen.md

sizeof與strlen.md

**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;
}