Re: [問題] 指標問題
※ 引述《QQ29 (我愛阿蓉)》之銘言:
: 以下是我做的小小測試 不過我故意不寫成繼承
: class AA{
: public:
: AA():x(0),a(0){}
: int x;
: int a;
: void FOO(){cout<<"A"<<endl;}
: };
: class BB{
: public:
: BB():y(0.0),b(0.0){}
: double y;
: double b;
: int z;
: void FOO(){cout<<"B"<<endl;}
: };
: int main()
: {
: BB *pb=new BB;
pb 指向 BB 物件的第一個位置
↙
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| | | |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
\ / \ / \ /
y b z
: AA* p=(AA*)pb;
把pb這個位置當成是AA物件的位置丟給p
所以 p 也指向 BB 物件的第一個位置 (在p的眼中他是AA)
pb, p
↙
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| | | |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
\ / \ / \ /
y b z
: p->x=5;
p->x 是第一個位置 所以應該是 y 的前四個 byte
pb, p
↙
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| int 5 | | | |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
\ / \ / \ /
y b z
: char *ptr=(char*)&pb->y;
y 是BB物件的第一個位置 所以等同於把 pb 所指的位置傳給 ptr
(只是type不同 不過沒查 反正都硬轉了)
pb, p, ptr
↙
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| int 5 | | | |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
\ / \ / \ /
y b z
: ptr-=4;
假如沒有
: cout<<(int)*ptr;
把 ptr 所指的位置當成 int 輸出
所以不意外會是 5
pb, p, ptr
↙
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| int 5 | | | |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
\ / \ / \ /
y b z
: return 0;
: }
那如果 ptr -= 4 的話呢?
ptr pb, p
↙ ↙
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| int 5 | | | |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
\ / \ / \ /
y b z
就跑到前面了...
: 如果ptr不-4 印的出5
: 可是我不懂為啥可以印
--
人家可不是為了你才這樣做的哦!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 60.198.35.85
※ 編輯: dendrobium 來自: 60.198.35.85 (01/29 23:39)
→
01/29 23:42, , 1F
01/29 23:42, 1F
推
01/29 23:49, , 2F
01/29 23:49, 2F
推
01/30 13:11, , 3F
01/30 13:11, 3F
推
01/30 13:22, , 4F
01/30 13:22, 4F
推
01/30 14:00, , 5F
01/30 14:00, 5F
推
01/31 01:22, , 6F
01/31 01:22, 6F
→
01/31 02:31, , 7F
01/31 02:31, 7F
推
01/31 03:39, , 8F
01/31 03:39, 8F
推
02/01 04:27, , 9F
02/01 04:27, 9F
討論串 (同標題文章)
本文引述了以下文章的的內容:
13
58
以下文章回應了本文:
1
17
完整討論串 (本文為第 6 之 13 篇):
1
1
4
13
0
1
5
21
13
58
7
9
5
39
1
17
1
28
1
9
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章