看板 C_and_CPP 關於我們 聯絡資訊
各位大大不好意思~我又有問題了,可能我實力太弱,很多指標還是不太清楚~ 想問一下 #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
james732:*y.data1 等於 *(y.data1),這是優先權問題 11/01 12:11
james732:(*y).data1 跟 *(y.data1) 完全是兩回事 11/01 12:11
wawi:因為優先順序的問題? 11/01 12:15
wendly777:運算子都有優先順序,不想背那麼多就是用()強制順序 11/01 12:26
stupid0319:我不懂明明就可以寫y->data1,為什麼要故意加個星星呢?? 11/01 12:55
wawi:因為指標?? 11/01 13:05
loveme00835:你需要先把編譯器的訊息讀懂, 這比po文還容易 11/01 13:18
james732:y->data1 跟 (*y).data1 是同樣的意思 11/01 13:28
stupid0319:如果data1是另一個結構指標的話,(*(*y).data1).someone 11/01 13:37
stupid0319:a->b->c->d->e就變成 (*(*(*(*(*a).b).c).d).e) 11/01 13:40
stupid0319:縺結的結構體都這樣寫的話,那原始碼不就滿天星 11/01 13:42
wendly777:我想原po只是想練習語法,並不是認為這樣用比較好 11/01 13:48
stupid0319:原PO很用功,不過對記憶體架構不熟的樣子 11/01 13:51
stupid0319:找個小遊戲,打開遊戲修改大師,看一下記憶體長什麼樣子 11/01 13:52
stupid0319:比對一下位置跟資料的關係 11/01 13:53
purpose:為什麼不去買本書來看,這些書上都有寫 11/01 14:30
purpose:一般C++的入門書就可以 11/01 14:31