作者wei115 (NEET)
看板C_and_CPP
標題[問題] C裡面對結構用.和用->的結果一樣
時間Tue Nov 20 18:29:56 2018
如題
最近閱讀程式碼時,看到了不太清楚的用法
在實驗的時候發現
對結構(不是結構指標)用「.」和用「->」的結果一樣
例如:
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://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1542709800.A.D59.html
1F:推 CMJ0121: gcc (GCC) 8.2.1 20180831 對 struct 直接用 -> 會編譯11/20 18:34
2F:→ CMJ0121: 失敗11/20 18:34
3F:→ wei115: !?真假,我是用GDB實驗的,沒有實際編譯過11/20 18:39
4F:→ wei115: 我回去再試試看QQ11/20 18:40
在公車上用筆電實驗
發現真的沒辦法用gcc編譯過(可以用gdb ->)
然後被嚇到重新看了一下扣,發現我完全理解錯意思了
QQ肚子太餓了,思考能力都出問題了(難怪我一直Google不到...)
抱歉浪費大家的時間了m(_ _)m
要不要自刪啊QQ
5F:推 james732: 不要自刪啦,把你犯的錯補充上來就好 11/20 18:54
6F:推 chuegou: 可以補充啦造福後人 這板也不允許你刪吧 11/20 19:25
7F:推 b0920075: 自刪等劣退 11/20 21:06
QQ自己的烙賽要流芳百世惹
8F:推 me356500: 宣告指標結構才會這樣用ㄅ? 11/20 21:27
9F:推 CMJ0121: 剛剛試了 GDB 8.2 得到跟原 PO 一樣的結論 11/20 23:12
10F:→ CMJ0121: 在 GDB 對變數用 . 跟 -> 都是拿到 struct 的 member 11/20 23:14
本來以為GDB可以這樣用GCC也可以
就沒有用GCC去測試了QQ
※ 編輯: wei115 (122.118.213.36), 11/21/2018 00:32:03
11F:推 jamfly: -> 只是對指標的語法糖衣而已 11/21 09:31
12F:推 Vent: 之前看一個國外講struct pointer的影片,那個講師說他不太 11/21 11:38
13F:→ Vent: 懂為啥是用->,他一開始都是用(*a).的形式來理解a-> 11/21 11:38
14F:→ bibo9901: 我也好奇, 既然編譯器知道a是指標還是struct, 為什麼要 11/23 01:46
15F:→ bibo9901: 逼我使用不同的語法? 11/23 01:46
16F:→ uranusjr: 在 C++ 裡 -> 可以 override 所以這兩個不見得一樣 11/25 14:58
17F:→ uranusjr: 不過為什麼當初 C 要這樣設計就只能問作者了, 不過我想 11/25 14:59
18F:→ uranusjr: 這應該也是很合理的設計, 否則光想一個變數是不是指標就 11/25 14:59
19F:→ uranusjr: 會很頭大, 別忘了那年代沒有 IDE, 變數型別只能自己記得 11/25 15:00
20F:→ sarafciel: 你要寫(*ptr).mem也可以呀 ptr->mem本來就是語法糖 11/26 17:42
21F:推 dces4212: C裡面. 用在操作實體 而 -> 用在操作指標中的實體 12/17 16:45