我需要各位高手給我一個觀念上的指點@@
以下是我隨興亂測試的code
class A{
public :
A(){X[0]=2;}char S[4];int X[10];
};
class B{
public :
B(){Y[0]=1;}int S;int Y[10];
};
int main()
{
A p;
B *bb = (B*)&p;
//B obj=(B)p; <======1.這行不給過 c-style轉型不是無敵硬轉嘛?
B obj=reinterpret_cast<B &>(p);//改為這樣
//2.以下這三個cout為啥 前兩個會一樣第三個不同...
cout<<&(bb->Y[0])<<endl;
cout<<&p.X[0]<<endl;
cout<<&obj.Y[0]<<endl;
return 0;
}
如果2.的問題是說 bb指向p 所以起始位址一樣 所以我這樣印結果一樣
obj自己有自己的位址 所以加個offset所以位址和上面不一樣????
3. 如果把三個cout的&拿掉 印值
全都印出2.............
可否請了解運作原理的人 說明一下為什麼嘛...
我可能可以自己體會為什麼 不過總覺得不要亂認知比較好 最後學的是錯的就不好了...
所以潑出來請教各位
以上1 2 3點問題 請各位解答 謝謝!~
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.113.207.187
※ 編輯: QQ29 來自: 140.113.207.187 (10/27 03:34)