这篇比较说的是关于c++中的类型转换的东西,重点是与指针有关的类型。
1.强制类型转换
看一下这个c++ 的代码:
int a=0x123456;//0x是16进制的写法
char c = (char) a;
printf("%d/n",c);
编译结果是86
指针类型的转换:
int a = 0x123456;
int *pa = &a;
char *ca = (char *)pa;
printf("%d/n",*ca);
print 打印结果还是86
所有指针变量的大小都是固定的,4个字节。那么,指针变量定义的时候,前面的类型说明什么呢?既然int * p_1;char * p_c
p_1和p_c大小都是4字节,那么int和char在这里的作用?
比如:
int a =0x123456;
int * p_1=&a;
那么int * 说明p_1指向的类型是一个整型,这意味:p_1每次操作的时候,以4字节为单位,就是说每次4字节的取内存,所以p_1指向的是a的地址。
指针类型转换是无限的,高级的地方就在这里,指针只是存放地址。
再看一个例子:
struct A
{
int a;
}
struct B
{
char c;
}
struct A a;
Strut B * p_b;
a.a=0x123456;
p_b=(struct B*)&a;
printf("%d\n",p_b.c);
打印的结果是86
总结:
指针定义的类型说明的作用就是:该变量指向的内存空间的大小和一次操作的单位。