arm64汇编篇 - 014 指针的运算
2018-06-04 本文已影响12人
ClementGu
指针的宽度
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(不讨论溢出情况)
-
比较大小
指针是可以比较大小的。 -
运算本质
指针的运算本质是为了从内存中取到相应类型的数据。
总结
- 指针自增、自减的结果,其实就是指针指向的数据类型宽度决定的!
- 指针加上或减去一个整数的结果,其实就是指针指向的数据类型宽度决定的!
- 指针求差,得到的结果是整形,其结果和指针指向的数据类型宽度有关!
- 这也就是指针的特点! 它的运算单位 是数据类型的宽度!