zoukankan      html  css  js  c++  java
  • 结构体的不完整声明

    首先解释一下啥是结构体的不完整声明:

    如下面这个例子:

    struct B;    //对结构体B进行不完整声明

    程序中突然出现这么一句是干什么用呢?请看下面的程序:

    struct B;    //对结构体B进行不完整声明
      
    //结构体A中包含指向结构体B的指针
    struct A
    {
        struct B *partner;
        //other members;
    };
      
    //结构体B中包含指向结构体A的指针,在A声明完后,B也随之进行声明
    struct B
    {
        struct A *partner;
        //other members;
    };
     
     
    这下明白了吧?

    有时候,你必须声明一些相互之间存在依赖的结构。即:其中一个结构包含了另一个结构的一个成员或多个成员。和自引用一样,至少有一个结构必须在另一个结构体内部以指针的形式存在。问题在于声明部分:如果每个结构都引用了其他结构的标签,哪个结构应该首先被声明呢?

    1>该问题采用不完整声明来解决。它声明一个作为结构标签的标识符。然后,把这个标签用在不需要知道这个结构的长度的声明中,如声明指向这个结构的指针。接下来的声明把这个标签与成员列表联系在一起。

    Linux的代码中,在linux/sched.h中就有这么一个声明:

    struct task_struct;

    作用即是上面所述。

    至于不完整声明,应该是源于英文的incomplete declaration 或者是 forward declaration。
     
  • 相关阅读:
    魔兽世界中的一些公式
    T端大灾变版本传送大师(NPC 脚本)
    T端带数据库查询的假人系统
    T端GM上线提示
    T端mysql优化设置
    T端根据玩家职业来显示不同颜色的角色名字的C++代码
    IOS复习-UIButton
    从明天开始认真写博客
    为什么到今天还要坚持写博客
    cocos2d—1—环境安装
  • 原文地址:https://www.cnblogs.com/PhoenixMY/p/4683584.html
Copyright © 2011-2022 走看看