原文出處
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++編譯器的計算機]
晚上我給大家一個例子,可以從其內存上面看的很清楚