楼主:
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本来就是语法糖