作者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/cn.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