從 知乎 轉載
轉載幾篇知乎上我自己的回答,因爲不喜歡知乎的排版,所以在博客裏重新排版一遍。
原問題:C语言中“.”与“->”有什么区别?
除了表达形式有些不同,功能可以说完全一样阿。那为何又要构造两个功能一样的运算符? 效率有差异?可是现在编译器优化都那么强了,如果真是这样岂不是有些多此一举
刚刚翻了下书,说早期的C实现无法用结构直接当作参数在函数间传递,只能用指向结构的指针在函数间进行传递!我想这应该也是最直观的原因吧。
我的回答
首先
a->b
的含義是
(*a).b
,所以他們是不同的,不過的確
->
可以用
*
和
.
實現,不需要單獨一個運算符。
嗯,我這是說現代的標準化的 C 語義上來說,
->
可以用
*
和
.
的組合實現。
早期的 C 有一段時間的語義和現代的 C 的語義不太一樣。
稍微有點彙編的基礎的同學可能知道,在機器碼和彙編的角度來看,不存在變量,不存在 struct …