结构体继承小知识点

C中结构体的继承
- 起因是一段代码,我没看懂,简化一下是这样:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
struct Base {
int x;
int y;
};
struct Derived {
struct Base base;
int z;
};
int main() {
struct Derived d;
struct Base* b = (struct Base*)&d;
// 通过 b 访问 Base 的成员
b->x = 1;
b->y = 2;
// 通过 d 访问 Derived 的成员
d.z = 3;
// 输出结果
printf("b->x = %d, b->y = %d\n", b->x, b->y); // 输出: b->x = 1, b->y = 2
printf("d.z = %d\n", d.z); // 输出: d.z = 3
// 尝试通过 b 访问 z(错误)
// b->z = 4; // 这行代码会导致编译错误
return 0;
} - 实际上,base是derived的基类,derived相较之base多出了一个z属性。
- 之所以把base作为derived的第一个变量,就是因为结构体中,第一个变量的地址和整个结构体的起点地址是重合的。
- 所以如果把这个结构体转换成Base类型,就可以直接作为base结构体来访问
- 后面如果还需要访问多出来的z属性,可以转换回Derived类型