冰楓論壇

 找回密碼
 立即註冊
搜索
查看: 3465|回覆: 0
打印 上一主題 下一主題

[心得] [C++] 點(.)與鍵頭(->)的使用規則

[複製鏈接]

855

主題

0

好友

869

積分

高級贊助會員

Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20

UID
390967
帖子
1660
主題
855
精華
0
積分
869
楓幣
12244
威望
409
存款
10100
贊助金額
1800
推廣
0
GP
2803
閱讀權限
150
在線時間
197 小時
註冊時間
2023-5-18
最後登入
2024-12-22

2023年紀念勳章 太陽勳章 神手勳章 高級客戶 VIP會員 私服達人 懶人勳章 幼兒勳章 音樂勳章 屁孩勳章 貢獻王 性別(女) 性別(男) 積分勳章 發帖達人 2023端午節紀念勳章 富豪勳章 富可敵國 2023中秋節紀念勳章 解說達人 論壇粉絲 2023聖誕節紀念勳章 2024年紀念勳章 2024端午節紀念勳章 2024中秋節紀念勳章 2024聖誕節紀念勳章

跳轉到指定樓層
1
發表於 2023-6-14 17:19:54 |只看該作者 |倒序瀏覽
簡而言之,當變數是結構體(結構/類別)時,引用成員使用點(.);當變數是指向結構體的『指標』時,引用成員使用鍵頭(->)
  1. a->b;
複製代碼
可以視為
  1. (*a).b;
複製代碼
也就是『->』是『*』+『.』的語法糖(Syntactic Sugar)
用以下兩個例子比對使用『->』與『.』的差異
『.』:
  1. struct stu{
  2.     int  age;
  3.     stu* next;
  4. };
  5. int main(){
  6.     stu s1;
  7.     s1.age = 18;
  8.     return 0;
  9. }
複製代碼
『->』:
  1. struct stu{
  2.     int  age;
  3.     stu* next;
  4. };
  5. int main(){
  6.     stu* phead = (stu*)malloc(sizeof(stu));
  7.     phead->age = 18;
  8.     phead->next = NULL;
  9.     stu* p = phead;
  10.     return 0;
  11. }
複製代碼
可以看出兩個例子,本質上是一樣的

總結來說
  • A->a表示A是指向結構體的指標
  • A.a表示A是結構體
  • A->a等效於(*A).a
  • A.B則A為物件或者結構體;
  • A->B則A為指標, ->是成員提取, A->B是提取A中的成員B, A只能是指向類別、結構、聯合的指標
  • (*a).b 等同於 a->b
  • "."一般情況下讀作"的"; "->"一般讀作"指向的結構體的", 也就是說在結構中, 運算符號->是運算符號*和運算符號.的結合
  • "->"是指向結構體成員運算符號, "."是斷點符號, 不屬於運算符號
  • "->"所指向的是結構體或物件的首個位址,  "."所指向的是結構體或物件
  • "->"的用處是使用一個指向訪問結構體或物件其內部成員, "."的用處是使用一個指向訪問結構體或物件
[發帖際遇]: whitefox 搭「雲豹勘災」不但引發民怨,還花費油資 1 楓幣 幸運榜 / 衰神榜
收藏收藏0 推0 噓0


把本文推薦給朋友或其他網站上,每次被點擊增加您在本站積分: 1鑰匙
複製連結並發給好友,以賺取推廣點數
簡單兩步驟,註冊、分享網址,即可獲得獎勵! 一起推廣文章換商品、賺$$
高級模式
B Color Image Link Quote Code Smilies |上傳

廣告刊登意見回饋關於我們管群招募本站規範DMCA隱私權政策

Copyright © 2011-2024 冰楓論壇, All rights reserved

免責聲明:本網站是以即時上載留言的方式運作,本站對所有留言的真實性、完整性及立場等,不負任何法律責任。

而一切留言之言論只代表留言者個人意見,並非本網站之立場,用戶不應信賴內容,並應自行判斷內容之真實性。

小黑屋|手機版|冰楓論壇

GMT+8, 2024-12-22 19:13

回頂部