p->name:這是指針訪問運算符(箭頭運算符)。當 p
是一個指向結構體的指針時,用 p->name
來訪問結構體的成員。
student* p = &stu; // p 是一個指向 student 類型的指針
cout << p->name << endl; // 通過指針 p 訪問 name 成員
p.name:這是點運算符。當 p
是一個結構體對象而不是指針時,用 p.name
來訪問結構體的成員。
student stu = { "zhangsan", 3, 60 }; // stu 是一個 student 類型的對象
cout << stu.name << endl; // 通過對象 stu 訪問 name 成員
具體的代碼片段,以便更清楚地理解:
#include<iostream>
#include<cstdio>
using namespace std;struct student {string name;int age;int score;
};int main() {student stu = { "zhangsan", 3, 60 };student* p = &stu; // p 是指向 stu 的指針// 使用指針訪問運算符 -> 來訪問成員cout << "name: " << p->name << " age: " << p->age << " score: " << p->score << endl;// 使用對象和點運算符 . 來訪問成員cout << "name: " << stu.name << " age: " << stu.age << " score: " << stu.score << endl;return 0;
}
運行上述代碼,輸出如下:
name: zhangsan age: 3 score: 60
name: zhangsan age: 3 score: 60
可以看到,通過指針 p
訪問結構體成員和直接通過結構體對象 stu
訪問成員,效果是一樣的,但它們的訪問方式不同:
- 指針訪問:
p->name
,p->age
,p->score
- 對象訪問:
stu.name
,stu.age
,stu.score
總結
- 使用
->
運算符用于通過指針訪問結構體的成員。 - 使用
.
運算符用于通過結構體對象訪問其成員。
確保根據變量的類型(是指針還是對象)使用正確的運算符。