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。
     
  • 相关阅读:
    jdk版本切换
    Java开发中遇到的问题
    递归删除文件夹
    重写equals方法
    JSP基础
    js把变量转换成json数据
    myBatista批量查询和插入
    Jquery密码强度校验
    Linux配置外网访问mysql
    linux下开启、关闭、重启mysql服务命令
  • 原文地址:https://www.cnblogs.com/PhoenixMY/p/4683584.html
Copyright © 2011-2022 走看看