指針到底是什么 ?

通過匯編查看 指針到達(dá)是什么?

  1. 指針(包括多級指針): 就是 一個 地址編號 ;
  2. 內(nèi)容:每個地址編號里面 都存儲了東西;

通過下面的例子,可以很簡單的了解

  • char a = 'A' ;其實 a 是 ‘A’的地址;
  • char * pa = &a ; pa 是 a的地址
int test() {
    
    /**
     左邊的就是給我們程序員看的;
     右邊的 才是 真正操作的
     */
    
    // mov    w8, #0x41 ; w8 存儲 ‘A’ 這個立即數(shù)
    // strb   w8, [sp, #0x2f]  ; 把值 ‘A’ 存到  a = (sp + 0x2f); 可以看到 a 其實是 ‘A’的地址
    char a = 'A';
    // add    x8, sp, #0x2f    ; 取出 a (這個a其實是 ‘A’的地址)
    // str    x8, [sp, #0x20]; 將a 存儲到  pa =(sp + 0x20) 這個地址
    char * pa = &a;
    // add    x8, sp, #0x20  ; 取出 pa
    // str    x8, [sp, #0x18] ; 把 pa  存到 ppa =(sp + 0x18)
    char ** ppa = &pa;
    // ldr    x8, [sp, #0x18]; 取出 ppa的內(nèi)容 pa
    // ldr    x8, [x8]; 取出 pa 的內(nèi)容 a
    // str    x8, [sp, #0x10]; a 存放到 pa2 =(sp - 0x10)的地址中
    // char *pa2 = *ppa; => char *pa2 = &a;
    char *pa2 = *ppa;
    // ldr    x8, [sp, #0x18] ; 取出 ppa,下面有兩個指針,就自身取兩次
    // ldr    x8, [x8]
    // ldrb   w8, [x8]
    // strb   w8, [sp, #0xf] ; 把w8 存儲到  a2 =(sp + 0xf) 這個地址
    char a2 = **ppa;
    
    // ldr    x8, [sp, #0x10];取出 pa2
    // ldrb   w8, [x8]; 把 pa2 的內(nèi)容取出來
    char a3 = *pa2;
    
    

    return 0;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 指針是C語言中廣泛使用的一種數(shù)據(jù)類型。 運用指針編程是C語言最主要的風(fēng)格之一。利用指針變量可以表示各種數(shù)據(jù)結(jié)構(gòu); ...
    朱森閱讀 3,619評論 3 44
  • 摘 要 為了對計算機系統(tǒng)有著更深入的了解以及研究系統(tǒng)間的協(xié)作關(guān)系。本大作業(yè)針對hello程序運行的一系列過程對c...
    icey_J閱讀 636評論 0 0
  • 2016年國慶假期終于把此書過完,整理筆記和體會于此。 關(guān)于書名 書名源于俄羅斯的演員斯坦尼斯拉夫斯基創(chuàng)作的《演員...
    李劍飛的簡書閱讀 7,462評論 2 65
  • 匯編語言:都是直接操作地址去訪問內(nèi)存單元里面等內(nèi)容。 C語言作為高級語言:提供通過地言:都是地址訪問內(nèi)存單元的內(nèi)容...
    這個夏天卟太熱閱讀 202評論 0 0
  • 16宿命:用概率思維提高你的勝算 以前的我是風(fēng)險厭惡者,不喜歡去冒險,但是人生放棄了冒險,也就放棄了無數(shù)的可能。 ...
    yichen大刀閱讀 8,176評論 0 4

友情鏈接更多精彩內(nèi)容