关于强制类型转换
程序员文章站
2022-07-15 16:37:11
...
思考
#include<stdio.h>
int main()
{
int a[4] = {1, 2, 3, 4};
int *ptr1=(int *)(&a+1);
int *ptr2=(int *)((int)a+1);
printf("%x, %x\n", ptr1[-1], *ptr2);
return 0;
}
输出:4,2000000
我们先看第一个我们知道ptr1[n] = *(ptr1 + n)所以ptr1[-1]实际上就说ptr所指的前一个元素,除此之外我们还要注意int *ptr1=(int *)(&a+1);中的&a是取a的引用,他的值和a相同(本人亲测),但是引用相当于取整体,所以+1相当于+4,所以指针ptr所指的前一个元素为4.
第二个
将a转为int类型(同char *)注:除了指针类型只能用转int,因为指针固定的,必须转int(4字节),强制类型转换不能对内存地址操作,所以只可以用int,这样表示让地址按整形去计算。
联想
#include<stdio.h>
int main()
{
char a[5] = {1, 1, 1, 1,0};
int *ptr1=(int *)(&a+1);
int *ptr2=(int *)((int)a+1);
printf("%x, %x\n", ptr1[-1], *ptr2);
return 0;
}
大家能想到这样结果是多少么