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

作者: 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:00
gcc (GCC) 8.2.1 20180831 對 struct 直接用 -> 會編譯失敗
作者: wei115 (ㄎㄎ)   2018-11-20 18:39:00
!?真假,我是用GDB實驗的,沒有實際編譯過我回去再試試看QQ
作者: james732 (好人超)   2018-11-20 18:54:00
不要自刪啦,把你犯的錯補充上來就好
作者: chuegou (chuegou)   2018-11-20 19:25:00
可以補充啦造福後人 這板也不允許你刪吧
作者: b0920075 (Void)   2018-11-20 21:06:00
自刪等劣退
作者: me356500 (呵呵)   2018-11-20 21:27: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, 變數型別只能自己記得
作者: sarafciel (Cattuz)   2018-11-26 17:42:00
你要寫(*ptr).mem也可以呀 ptr->mem本來就是語法糖

Links booklink

Contact Us: admin [ a t ] ucptt.com