[问题] 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