原文出處
http://community.csdn.net/Expert/topic/5279/5279199.xml?temp=.2457392
在文章中大家在討論一個(gè)問(wèn)題:
如果沒(méi)有存儲(chǔ)上沒(méi)有區(qū)別的話,請(qǐng)看下例:
float a=3.45;
int * p1=&a;
float * p2=&a;
cout<<"p1"<<"=>"<<*p1<<endl;
cout<<"p2"<<"=>"<<*p2<<endl;
結(jié)果是:
p1=>1107951616
p2=>3.45
書上的解釋是:p1盡管與p2的地址相同,但它是整型指針,它總是訪問(wèn)該地址中的整型數(shù)。
首先在32位CPU上面,指針都是4位的,例如0xXX XX XX XX
那么既然指針是一樣的,那么為什么指針類型不同的話,讀出來(lái)的數(shù)據(jù)就變了樣呢?
這是編譯器的問(wèn)題,例如我有個(gè)例子
char *p = 'c';
int *p1 = 10;
在32位機(jī)器上面
這里面p1是指向4字節(jié)的int變量,而p是指向1字節(jié)的char 變量
這樣編譯器在用p1變量的時(shí)候,會(huì)取0x XX XX XX XX后面的4個(gè)字節(jié)
而p變量,只會(huì)取0x XX XX XX XX后面的1個(gè)字節(jié)
因?yàn)楸救爽F(xiàn)在在網(wǎng)吧里面[不知道大家有沒(méi)有在網(wǎng)吧里面碰到裝有c++編譯器的計(jì)算機(jī)]
晚上我給大家一個(gè)例子,可以從其內(nèi)存上面看的很清楚