从 知乎 转载
转载几篇知乎上我自己的回答,因为不喜欢知乎的排版,所以在博客里重新排版一遍。
原问题:C语言中“.”与“->”有什么区别?
除了表达形式有些不同,功能可以说完全一样阿。那为何又要构造两个功能一样的运算符? 效率有差异?可是现在编译器优化都那么强了,如果真是这样岂不是有些多此一举
刚刚翻了下书,说早期的C实现无法用结构直接当作参数在函数间传递,只能用指向结构的指针在函数间进行传递!我想这应该也是最直观的原因吧。
我的回答
首先
a->b
的含义是
(*a).b
,所以他们是不同的,不过的确
->
可以用
*
和
.
实现,不需要单独一个运算符。
嗯,我这是说现代的标准化的 C 语义上来说,
->
可以用
*
和
.
的组合实现。
早期的 C 有一段时间的语义和现代的 C 的语义不太一样。
稍微有点汇编的基础的同学可能知道,在机器码和汇编的角度来看,不存在变量,不存在 struct …