结构体与指针(先不看)¶
指向结构体¶
指针也可以保存结构体变量的地址。
#include <iostream>
#include <string>
using namespace std;
struct stu {
string name;
int id;
int chinese, math;
};
int main() {
stu A = {"xiaoming", 1001, 90, 95};
stu *p = &A;
cout << p->name << ' ' << p->id;
return 0;
}
A 是结构体变量,p 是指向 A 的指针。

点号与箭头¶
| 写法 | 含义 |
|---|---|
A.name |
用结构体变量访问成员 |
p->name |
用结构体指针访问成员 |
(*p).name |
先解引用,再访问成员 |
p->name 与 (*p).name,这里访问的是同一个成员。
括号不能漏。 *p.name 不是 (*p).name,点号的优先级比解引用高。
通过指针修改成员¶
修改的就是 p 指向的结构体,不是另外复制出来的一个学生。
结构体数组与指针¶
数组下标、指针移动、成员访问,可以组合使用。先用自己看得清楚的写法,不用刻意写复杂。
常见错误¶
指针没指向有效对象,就访问成员。
stu *p = nullptr; 只定义了空指针,没有创建学生对象,不能接着写 p->id = 1;。
把变量和指针的访问方式写混。
结构体变量用点号,结构体指针用箭头。判断时,先看 A、p 分别是什么类型。