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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章