指針和數組是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;
}
另外指針還可指向函數