原文出处
http://community.csdn.net/Expert/topic/5279/5279199.xml?temp=.2457392
在文章中大家在讨论一个问题:
如果没有存储上没有区别的话,请看下例:
float a=3.45;
int * p1=&a;
float * p2=&a;
cout<<"p1"<<"=>"<<*p1<<endl;
cout<<"p2"<<"=>"<<*p2<<endl;
结果是:
p1=>1107951616
p2=>3.45
书上的解释是:p1尽管与p2的地址相同,但它是整型指针,它总是访问该地址中的整型数。
首先在32位CPU上面,指针都是4位的,例如0xXX XX XX XX
那么既然指针是一样的,那么为什么指针类型不同的话,读出来的数据就变了样呢?
这是编译器的问题,例如我有个例子
char *p = 'c';
int *p1 = 10;
在32位机器上面
这里面p1是指向4字节的int变量,而p是指向1字节的char 变量
这样编译器在用p1变量的时候,会取0x XX XX XX XX后面的4个字节
而p变量,只会取0x XX XX XX XX后面的1个字节
因为本人现在在网吧里面[不知道大家有没有在网吧里面碰到装有c++编译器的计算机]
晚上我给大家一个例子,可以从其内存上面看的很清楚