C++中的指针和数字
指针不是整型,虽然计算机通常把地址当作整数来处理。从概念上看,指针与整数是截然不同的类型。整数是可以执行加、减、除等运算的数字,而指针描述的是位置,将两个地址相乘没有任何意义。从可以对整数和指针执行的操作上看,它们也是彼此不同的。因此,不能简单地将整数赋给指针:
int * pti
pt=0xB8000000;//type mismatch
在这里,左边是指向 int的指针,因此可以把它赋给地址,但右边是一个整数。您可能知道,0xB8000000是老式计算机系统中视频内存的组合段偏移地址,但这条语句并没有告诉程序,这个数字就是一个地址。在 C99标准发布之前,C语言允许这样赋值。但C++在类型一致方面的要求更严格,编译器将显示一条错误消息,通告类型不匹配。要将数字值作为地址来使用,应通过强制类型转换将数字转换为适当的地址类型:
int *pt;
pt=(int*)0xB8000000;//types nowmatch
这样,赋值语句的两边都是整数的地址,因此这样赋值有效。注意,pt是imt 值的地址并不意味着 pt本身的类型是int。例如,在有些平台中,int类型是个2字节值,而地址是个4字节值。指针还有其他一些有趣的特性,这将在合适的时候讨论。下面看看如何使用指针来管理运行阶段的内存空间分配。
对C++感兴趣的朋友点这里:C/C++课程