作者:
wei115 (ㄎㄎ)
2018-11-20 18:29:56如題
最近閱讀程式碼時,看到了不太清楚的用法
在實驗的時候發現
對結構(不是結構指標)用「.」和用「->」的結果一樣
例如:
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,但好像不是如此?
這是為什麼呢?謝謝
作者:
CMJ0121 (請多指教!!)
2018-11-20 18:34:00gcc (GCC) 8.2.1 20180831 對 struct 直接用 -> 會編譯失敗
作者:
wei115 (ㄎㄎ)
2018-11-20 18:39:00!?真假,我是用GDB實驗的,沒有實際編譯過我回去再試試看QQ
作者:
chuegou (chuegou)
2018-11-20 19:25:00可以補充啦造福後人 這板也不允許你刪吧
作者:
CMJ0121 (請多指教!!)
2018-11-20 23:12:00剛剛試了 GDB 8.2 得到跟原 PO 一樣的結論在 GDB 對變數用 . 跟 -> 都是拿到 struct 的 member
作者:
jamfly (jamfly)
2018-11-21 09:31:00-> 只是對指標的語法糖衣而已
作者:
Vent (Avec le Vent)
2018-11-21 11:38:00之前看一個國外講struct pointer的影片,那個講師說他不太懂為啥是用->,他一開始都是用(*a).的形式來理解a->
作者:
bibo9901 (function(){})()
2018-11-23 01:46:00我也好奇, 既然編譯器知道a是指標還是struct, 為什麼要逼我使用不同的語法?
作者:
uranusjr (â†é€™äººæ˜¯è¶…級笨蛋)
2018-11-25 14:58:00在 C++ 裡 -> 可以 override 所以這兩個不見得一樣不過為什麼當初 C 要這樣設計就只能問作者了, 不過我想這應該也是很合理的設計, 否則光想一個變數是不是指標就會很頭大, 別忘了那年代沒有 IDE, 變數型別只能自己記得
你要寫(*ptr).mem也可以呀 ptr->mem本來就是語法糖