[問題] Struct 指標

看板C_and_CPP (C/C++)作者 (Jun)時間15年前 (2010/11/01 12:09), 編輯推噓2(2015)
留言17則, 6人參與, 最新討論串1/1
各位大大不好意思~我又有問題了,可能我實力太弱,很多指標還是不太清楚~ 想問一下 #include <stdio.h> #include <stdlib.h> struct Data { int data1; int data2; }; int main(void) { Data x,*y; y=&x; (*y).data1=4; printf("%d",x.data1); system("pause"); } 問題 :(*y).data1=4 可以寫成 y->data1; 但為什麼不能寫成 *y.data1呢? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 219.70.214.78

11/01 12:11, , 1F
*y.data1 等於 *(y.data1),這是優先權問題
11/01 12:11, 1F

11/01 12:11, , 2F
(*y).data1 跟 *(y.data1) 完全是兩回事
11/01 12:11, 2F

11/01 12:15, , 3F
因為優先順序的問題?
11/01 12:15, 3F

11/01 12:26, , 4F
運算子都有優先順序,不想背那麼多就是用()強制順序
11/01 12:26, 4F

11/01 12:55, , 5F
我不懂明明就可以寫y->data1,為什麼要故意加個星星呢??
11/01 12:55, 5F

11/01 13:05, , 6F
因為指標??
11/01 13:05, 6F

11/01 13:18, , 7F
你需要先把編譯器的訊息讀懂, 這比po文還容易
11/01 13:18, 7F

11/01 13:28, , 8F
y->data1 跟 (*y).data1 是同樣的意思
11/01 13:28, 8F

11/01 13:37, , 9F
如果data1是另一個結構指標的話,(*(*y).data1).someone
11/01 13:37, 9F

11/01 13:40, , 10F
a->b->c->d->e就變成 (*(*(*(*(*a).b).c).d).e)
11/01 13:40, 10F

11/01 13:42, , 11F
縺結的結構體都這樣寫的話,那原始碼不就滿天星
11/01 13:42, 11F

11/01 13:48, , 12F
我想原po只是想練習語法,並不是認為這樣用比較好
11/01 13:48, 12F

11/01 13:51, , 13F
原PO很用功,不過對記憶體架構不熟的樣子
11/01 13:51, 13F

11/01 13:52, , 14F
找個小遊戲,打開遊戲修改大師,看一下記憶體長什麼樣子
11/01 13:52, 14F

11/01 13:53, , 15F
比對一下位置跟資料的關係
11/01 13:53, 15F

11/01 14:30, , 16F
為什麼不去買本書來看,這些書上都有寫
11/01 14:30, 16F

11/01 14:31, , 17F
一般C++的入門書就可以
11/01 14:31, 17F
文章代碼(AID): #1CpZroWW (C_and_CPP)
文章代碼(AID): #1CpZroWW (C_and_CPP)