码迷,mamicode.com
首页 > 其他好文 > 详细

结构体的不完整声明

时间:2015-07-28 20:21:27      阅读:115      评论:0      收藏:0      [点我收藏+]

标签:

 

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

 

如下面这个例子:

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。
 

 

结构体的不完整声明

标签:

原文地址:http://www.cnblogs.com/PhoenixMY/p/4683584.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!