美文网首页
arm64汇编篇 - 014 指针的运算

arm64汇编篇 - 014 指针的运算

作者: ClementGu | 来源:发表于2018-06-04 21:33 被阅读12次
    指针的宽度

    1.写入下面代码真机运行:

    void func(){
    int * a;
    printf("%lu",sizeof(a));
    }
    

    2.得出结果为8即指针在64位中的宽度为8个字节。

    指针的运算
    • 编译器决定指针不可以做乘法运算可以做加法减法运算
    • 指针的加法
      1.如下代码:
    void func(){
    int * a;
    a = (int *)100;
    a++;
    printf("%d",a);
    }
    

    2.解析:

    1.a为指针
    2.将100强转(int *)指针赋值给a
    3.a自增
    4.打印a

    得出结果为104。
    由此得出:指针的运算结果由器所指向的数据类型宽度决定(数据类型看其去掉一个*看左边的类型)
    3.由此得将上文换成char *结果为101:

    void func(){
    char * a;
    a = (char *)100;
    a++;
    printf("%d",a);
    }
    

    5.如果在char* 后面再加个*是多少呢?
    答案是108,char **去掉一个*后为char *为一个指针,指针的宽度为8个字节所以输出结果为108。

    • 指针的减法
      1.输入如下代码:
    void func(){
    int * a;
    a = (int *)100;
    int *b;
    b = (int *)200;
    int  c = a - b;
    printf("%d",c);
    }
    

    2.输出结果为:

    -25

    3.解析:
    1). 指针的计算的结果由其数据类型的宽度决定的
    2). int类型的宽度为4
    3). 最终结果为-100 / 4 为-25(不讨论溢出情况)

    • 比较大小
      指针是可以比较大小的。

    • 运算本质
      指针的运算本质是为了从内存中取到相应类型的数据。

    总结

    • 指针自增、自减的结果,其实就是指针指向的数据类型宽度决定的!
    • 指针加上或减去一个整数的结果,其实就是指针指向的数据类型宽度决定的!
    • 指针求差,得到的结果是整形,其结果和指针指向的数据类型宽度有关!
    • 这也就是指针的特点! 它的运算单位 是数据类型的宽度!

    相关文章

      网友评论

          本文标题:arm64汇编篇 - 014 指针的运算

          本文链接:https://www.haomeiwen.com/subject/xjtusftx.html