结构体-前置声明

在C或C++语言中,结构体的前置声明(也称为“不完全声明”)允许我们在声明结构体变量之前,先告诉编译器结构体类型的名字,而不必给出结构体的具体内容。这样做可以解决某些情况下结构体类型相互引用的问题,即两个结构体互相包含对方指针的情况。
一旦完成了前置声明,我们就可以声明该类型的变量,但要注意的是,此时我们不能访问结构体的成员,因为我们没有提供成员的具体信息。只有当结构体被完整定义后,我们才能使用其成员。
以下是一个简单的例子:


// 前置声明
struct A;
// 完整定义
struct A {
    int a;
    struct B* b; // 嵌套其他结构体指针
};

// B的前置声明
struct B;
// B的完整定义
struct B {
    int b;
    struct A* a; // 嵌套A结构体指针
};

在这个例子中,我们首先前置声明了`struct A`和`struct B`,然后定义了`struct A`,在`struct A`的定义中使用了`struct B*`。之后,我们定义了`struct B`,在`struct B`的定义中使用了`struct A*`。这种情况下,`struct A`和`struct B`的定义是可以互相引用的。
如果我们改变了结构体的名字,比如将`struct A`改为`struct NewA`,那么在结构体被完整定义之前,我们必须使用新的名字`struct NewA`。任何使用旧名字`struct A`的地方都需要更新为新名字,否则编译器将无法识别`struct A`。
因此,在完成前置声明之后,如果结构体的名字发生了改变,我们必须在所有使用该结构体的地方使用新的名字,包括前置声明、完整定义以及所有使用该结构体类型的代码部分。如果新旧名字混用,编译器将会报错。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值