*和->的区别
* 解引用(取指针指向的值),通过指针访问指针指向的对象
-> 等价于(*ptr).member
ptr->menber 等于 (*ptr).menber
#include <iostream>
#include <string>
using namespace std;class Person {
public:string name;int age;void sayHi() {cout << "Hi, 我是 " << name << ",今年 " << age << " 岁。" << endl;}
};int main() {Person p; // 创建一个实例// 栈上分配内存,调用构造函数,p变成一个对象的实例
/*
栈内存:
┌─────────────────────────┐
│ p │ ← 这是一个完整的 Person 实例
│ name = "" │
│ age = 20 │
└─────────────────────────┘
*/p.name = "小明";p.age = 20;// 创建一个指针,指向 pPerson* ptr = &p;// 用 * 解引用访问(*ptr).sayHi();// 用 -> 简写访问ptr->sayHi();return 0;
}
Person* ptr = &p;
→ptr
是指向p
的指针(*ptr).sayHi();
→ 解引用ptr
得到p
,然后调用sayHi
ptr->sayHi();
→ 等价写法,更简洁