- UID
- 390967
- 帖子
- 1595
- 主題
- 822
- 精華
- 0
- 積分
- 854
- 楓幣
- 11017
- 威望
- 395
- 存款
- 10100
- 贊助金額
- 1800
- 推廣
- 0
- GP
- 2680
- 閱讀權限
- 150
- 在線時間
- 189 小時
- 註冊時間
- 2023-5-18
- 最後登入
- 2024-11-22
|
簡而言之,當變數是結構體(結構/類別)時,引用成員使用點(.);當變數是指向結構體的『指標』時,引用成員使用鍵頭(->)可以視為也就是『->』是『*』+『.』的語法糖(Syntactic Sugar)
用以下兩個例子比對使用『->』與『.』的差異
『.』:- struct stu{
- int age;
- stu* next;
- };
- int main(){
- stu s1;
- s1.age = 18;
- return 0;
- }
複製代碼 『->』:- struct stu{
- int age;
- stu* next;
- };
- int main(){
- stu* phead = (stu*)malloc(sizeof(stu));
- phead->age = 18;
- phead->next = NULL;
- stu* p = phead;
- return 0;
- }
複製代碼 可以看出兩個例子,本質上是一樣的
總結來說
- 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
- "."一般情況下讀作"的"; "->"一般讀作"指向的結構體的", 也就是說在結構中, 運算符號->是運算符號*和運算符號.的結合
- "->"是指向結構體成員運算符號, "."是斷點符號, 不屬於運算符號
- "->"所指向的是結構體或物件的首個位址, "."所指向的是結構體或物件
- "->"的用處是使用一個指向訪問結構體或物件其內部成員, "."的用處是使用一個指向訪問結構體或物件
|
|