指針和數組比較

指針和數組是c語言經常使用的,他們都涉及有地址的概念,指針指向指定類型的變量,數組名代表首元素的地址,&數組名代表整個數組的地址

那麼數組和指針在使用上有什麼不同?

首先:數組名是一個指針常量,不能被修改,指針可指向任意類型的空間,可變換指向。

從空間分配上:指針可指向動態分配的空間,空間不一定連續。而數組是棧上連續分配的空間。

從訪問效率上:數組是直接訪問,而指針要間接訪問。

從安全性上:數組使用不當回造成數組越界,而指針使用不當可能會造成內存泄漏。

從字節大小上:指針變量的大小是固定的,由操作系統的位數來決定,而數組內存的大小由數組的大小和數組元素的數據類型共同決定。

從彙編角度,比較指針和數組在定義和賦值上的不同

int main()
{
	//定義
	int *p = NULL;
	//mov         dword ptr [p],0   變量p的值賦爲0
	int arr[10] = {0};	
	//mov         dword ptr [arr],0  arr代表首元素的地址 定義時地址賦值爲0
	//和指針一樣
	//xor         eax,eax 
	//mov         dword ptr [ebp-34h],eax 初始化數組元素
	//......


	int a = 10;
	int *p = &a;
	//lea         eax,[a] 
	//mov         dword ptr [p],eax 
	*p = 20;
	//mov         eax,dword ptr [p] 
	//mov         dword ptr [eax],14h 
	int ar[3] = {0};
	ar[1] = 10;
	//mov        dword ptr [ebp-24h],0Ah //直接找到第二個元素的空間賦值
	
    //對*p和ar[x]賦值有所不同
	return 0;
}
另外指針還可指向函數




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