强制类型转换(int*)

来源:百度知道 编辑:UC知道 时间:2024/05/09 07:08:51
在vc中
int* pt;
pt=0xB8000000;为什么不能将0xB8000000直接看作一个地址赋给pt,

int* pt;
pt=(int*)0xB8000000;就可以?
并且
(int*)0xB8000000这句强制类型转换应该怎么理解?为什么他一强制转换就变成地址值了呢

想想最根本的区别,可以这样考虑,你给我个地址0x...
这是个常量,我根本不知道你这个地址指向多少个内存单元,它可以表示int,char ,float的首地址,还可以表示数组的首地址,然后我想用这个运算*(0x...)那编译器就无法知道,你想取的的内存区域。

int *pt=(int*)0xB8000000;

这里是赋值运算,要求两边指针类型一致,

0xB8000000本身是个16进制的数值
pt=0xB8000000//把一个数值赋给地址,显然是不可以的

(int*),就是把一个值强制转换为一个int型的指针,也就是说把这个值转换为一个地址,这个地址指向的内容是int型的值

pt=(int*)0xB8000000//就是把0xB8000000转换为int型的指针,并把该指针(地址)赋给pt

int* 表示一个指针,指针指向一个地址,你的那个0xB8000000或是别的,都可以强制转换成地址.