Pointer
Person *p;这一句是定义变量:
p是一个变量。*p表示:p是“指向Person的指针”。
所以: 👉 p 本身是个指针变量,它里面存的是一个地址。 👉 这个地址必须是某个 Person 类型对象的地址。
2. &tom
Person tom;
&tom;tom是一个Person类型的结构体变量。&tom表示“取tom的地址”。&tom的类型是Person*。
这与 p 的类型刚好匹配。
3. p = &tom
p = &tom;把 tom 的地址存进 p。结果是:p 指向 tom。
内存可以想象成这样:
tom (类型 Person) p (类型 Person*)
+------------------+ +----------------+
| name[32] | | 0x1000 (地址) |
| age | +----------------+
+------------------+
^
|
+---- p 里面存的就是 tom 的地址 0x1000
4. *p 的意思
p是一个指针,存了地址。*p表示“解引用”这个指针,找到它指向的对象”。- 所以
*p的类型是Person,等价于“tom本身”。
示例:
(*p).age = 20; // 相当于 tom.age = 20;5. 和 -> 的关系
因为 (*p).age 太啰嗦,C 提供简写:
p->age = 20; // 等价于 (*p).age✅ 总结一句
p是个指针变量,里面存的是tom的地址。*p不是“指针”,而是“指针所指的对象”(即tom)。&tom是取tom的地址,正好能赋值给p。
```
qua