1. 程式人生 > >C講堂 C語言中“.”與“->”有什麼區別?

C講堂 C語言中“.”與“->”有什麼區別?

原文:https://blog.csdn.net/faihung/article/details/79190039  
這雖然是個小問題,但有時候很容易讓人迷惑,因為有的時候用混淆了,程式編譯不通過。

下面說說我對它們的理解。

一般情況下用“.”,只需要宣告一個結構體。格式是,結構體型別名+結構體名。然後用結構體名加“.”加域名就可以引用域 了。因為自動分配了結構體的記憶體。如同 int a;一樣。

而用“->”,則要宣告一個結構體的指標,還要手動開闢一個該結構體的記憶體,然後把返回的指標給宣告的結構體指標,才能用“->”正確引用。否則記憶體中只分配了指標的記憶體,沒有分配結構體的記憶體,導致想要的結構體實際上是不存在。這時候用“->”引用自然出錯了,因為沒有結構體,自然沒有結構體的域了。

此外,(*a).b 等價於 a->b。

"."一般情況下讀作"的”。
“->”一般讀作"指向的結構體的"。