指针不是整型,虽然计算机通常把地址当作整数来整理。
不能简单地将整数赋给指针:
- int *pt;
- pt = 0xB8000000;
0xB8000000是老式计算机系统中视频内存的组合段偏移地址,但这条语句并没有告诉程序,这个数字就是一个地址。在C99标准发布之前,C语言允许这样赋值。但C++在类型一致方面的要求更严格,编译器将显示一条错误消息,通告类型不匹配。要将数字值作为地址来使用,应通过强制类型转换将数字转换为适当的地址类型:
- int *pt;
- pt = (int * )0xB8000000;
这样,赋值语句的两边都是整数的地址,因此这样赋值有效。
注意,pt是int值的地址并不意味着pt本身的类型是int。