whitefox 發表於 2023-6-14 17:19:54

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

簡而言之,當變數是結構體(結構/類別)時,引用成員使用點(.);當變數是指向結構體的『指標』時,引用成員使用鍵頭(->)a->b;可以視為(*a).b;也就是『->』是『*』+『.』的語法糖(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
[*]"."一般情況下讀作"的"; "->"一般讀作"指向的結構體的", 也就是說在結構中, 運算符號->是運算符號*和運算符號.的結合
[*]"->"是指向結構體成員運算符號, "."是斷點符號, 不屬於運算符號
[*]"->"所指向的是結構體或物件的首個位址,  "."所指向的是結構體或物件
[*]"->"的用處是使用一個指向訪問結構體或物件其內部成員, "."的用處是使用一個指向訪問結構體或物件
頁: [1]
查看完整版本: [C++] 點(.)與鍵頭(->)的使用規則