[問題] C裡面對結構用.和用->的結果一樣

看板C_and_CPP作者 (NEET)時間5年前 (2018/11/20 18:30), 5年前編輯推噓9(9012)
留言21則, 12人參與, 5年前最新討論串1/1
如題 最近閱讀程式碼時,看到了不太清楚的用法 在實驗的時候發現 對結構(不是結構指標)用「.」和用「->」的結果一樣 例如: struct test { int a; int b; int c; }; struct test test = {1, 2, 3}; test.a == test->a == 1; test.b == test->b == 2; 我對->的理解是a->b = (*a).b,但好像不是如此? 這是為什麼呢?謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 120.109.131.39 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1542709800.A.D59.html

11/20 18:34, 5年前 , 1F
gcc (GCC) 8.2.1 20180831 對 struct 直接用 -> 會編譯
11/20 18:34, 1F

11/20 18:34, 5年前 , 2F
失敗
11/20 18:34, 2F

11/20 18:39, 5年前 , 3F
!?真假,我是用GDB實驗的,沒有實際編譯過
11/20 18:39, 3F

11/20 18:40, 5年前 , 4F
我回去再試試看QQ
11/20 18:40, 4F
在公車上用筆電實驗 發現真的沒辦法用gcc編譯過(可以用gdb ->) 然後被嚇到重新看了一下扣,發現我完全理解錯意思了 QQ肚子太餓了,思考能力都出問題了(難怪我一直Google不到...) 抱歉浪費大家的時間了m(_ _)m 要不要自刪啊QQ

11/20 18:54, 5年前 , 5F
不要自刪啦,把你犯的錯補充上來就好
11/20 18:54, 5F

11/20 19:25, 5年前 , 6F
可以補充啦造福後人 這板也不允許你刪吧
11/20 19:25, 6F

11/20 21:06, 5年前 , 7F
自刪等劣退
11/20 21:06, 7F
QQ自己的烙賽要流芳百世惹

11/20 21:27, 5年前 , 8F
宣告指標結構才會這樣用ㄅ?
11/20 21:27, 8F

11/20 23:12, 5年前 , 9F
剛剛試了 GDB 8.2 得到跟原 PO 一樣的結論
11/20 23:12, 9F

11/20 23:14, 5年前 , 10F
在 GDB 對變數用 . 跟 -> 都是拿到 struct 的 member
11/20 23:14, 10F
本來以為GDB可以這樣用GCC也可以 就沒有用GCC去測試了QQ ※ 編輯: wei115 (122.118.213.36), 11/21/2018 00:32:03

11/21 09:31, 5年前 , 11F
-> 只是對指標的語法糖衣而已
11/21 09:31, 11F

11/21 11:38, 5年前 , 12F
之前看一個國外講struct pointer的影片,那個講師說他不太
11/21 11:38, 12F

11/21 11:38, 5年前 , 13F
懂為啥是用->,他一開始都是用(*a).的形式來理解a->
11/21 11:38, 13F

11/23 01:46, 5年前 , 14F
我也好奇, 既然編譯器知道a是指標還是struct, 為什麼要
11/23 01:46, 14F

11/23 01:46, 5年前 , 15F
逼我使用不同的語法?
11/23 01:46, 15F

11/25 14:58, 5年前 , 16F
在 C++ 裡 -> 可以 override 所以這兩個不見得一樣
11/25 14:58, 16F

11/25 14:59, 5年前 , 17F
不過為什麼當初 C 要這樣設計就只能問作者了, 不過我想
11/25 14:59, 17F

11/25 14:59, 5年前 , 18F
這應該也是很合理的設計, 否則光想一個變數是不是指標就
11/25 14:59, 18F

11/25 15:00, 5年前 , 19F
會很頭大, 別忘了那年代沒有 IDE, 變數型別只能自己記得
11/25 15:00, 19F

11/26 17:42, 5年前 , 20F
你要寫(*ptr).mem也可以呀 ptr->mem本來就是語法糖
11/26 17:42, 20F

12/17 16:45, 5年前 , 21F
C裡面. 用在操作實體 而 -> 用在操作指標中的實體
12/17 16:45, 21F
文章代碼(AID): #1Ry-8erP (C_and_CPP)