arm64汇编篇 - 014 指针的运算

指针的宽度

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 指针的运算)