指針的反匯編
1.輸入如下代碼:
void func (){
int * a;
int b = 10;
a = &b;
}
2.真機(jī)運(yùn)行斷點(diǎn)調(diào)試如圖:
3.解析:
1.將椑稚瑁空間四個(gè)字節(jié)內(nèi)存給x8寄存器
2.將10賦值給w9寄存器
3.將w9寄存器的值存儲(chǔ)到x8寄存器指向的內(nèi)存空間
4.將x8的值存儲(chǔ)在sp偏移8個(gè)單位空間,即椦打空間衔彻。(局部變量是保存在棧中的寄存器不保存數(shù)據(jù))
-
數(shù)組指針
1.代碼如下:
void func()
{
int arr[5] = {1,2,3,4,5};
for (int i = 0;i<5;i++)
{
printf("%d\n",*(arr + i));
}
}
2.解析:
arr為指向數(shù)組內(nèi)存首地址的指針微谓。
(arr + i)為取對(duì)應(yīng)index的數(shù)據(jù)的地址没炒,想要取到對(duì)應(yīng)位置的數(shù)據(jù)在前面加* 即*(arr + 1)
3.運(yùn)行結(jié)果:
1
2
3
4
5
4.arr不可以arr++ 但是可以int *a = arr 強(qiáng)轉(zhuǎn)浓领,然后a++來代替陶耍。