指针到底是什么 ?

通过汇编查看 指针到达是什么?

  1. 指针(包括多级指针): 就是 一个 地址编号 ;
  2. 内容:每个地址编号里面 都存储了东西;

通过下面的例子,可以很简单的了解

  • char a = 'A' ;其实 a 是 ‘A’的地址;
  • char * pa = &a ; pa 是 a的地址
int test() {
    
    /**
     左边的就是给我们程序员看的;
     右边的 才是 真正操作的
     */
    
    // mov    w8, #0x41 ; w8 存储 ‘A’ 这个立即数
    // 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的内容 pa
    // ldr    x8, [x8]; 取出 pa 的内容 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 的内容取出来
    char a3 = *pa2;
    
    

    return 0;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容