这个静态结构的目的是啥?
Posted
技术标签:
【中文标题】这个静态结构的目的是啥?【英文标题】:What's the purpose of this static struct?这个静态结构的目的是什么? 【发布时间】:2015-02-27 14:49:29 【问题描述】:我遇到了下面的代码,但我对它的用途有点困惑。
struct bob
int myNum;
struct bob * next;
;
static struct bob_stuff
int theNum;
struct bob *lists;
bob;
我知道第二个结构是静态的并且被初始化为一个 bob 结构,但是你为什么要这样做呢?但我不太确定你为什么有 2 个结构。
【问题讨论】:
第二个结构不是struct bob
类型,它是struct bob_stuff
类型。有一个非常重要的区别。虽然结构的成员是等价的,但两个结构不能相互分配。
我很确定static
仅适用于变量bob
,而不适用于struct bob_stuff
。
静态成员只能从他们的文件中访问,而从其他文件你不能访问他们,这里你不能从其他文件访问 bob 但你可以访问 struct bob_stuff 和 struct bob。
那是个坏主意,声明和定义应该分开。正如每个人所说的那样,static
适用于struct bob_stuff
类型的实例bob
。你从哪里得到这样的例子?他们是非常糟糕的例子。
所以静态结构 bob_stuff 实际上包含一个静态的 bob 结构列表,但是 int myNum 不是静态的? struct bob_stuff 声明末尾的“bob”是什么意思?
【参考方案1】:
我认为是结构的名称让你感到困惑。
它是一个单链表的定义。
第一个结构
struct bob
int myNum;
struct bob * next;
;
定义列表的一个节点。我会用不同的名字重写它会更清楚
struct Node
int value;
struct Node * next;
;
第二个结构简单地定义了列表的头部和列表中的节点数(我认为)
static struct bob_stuff
int theNum;
struct bob *lists;
bob;
所以它可以像这样重写
static struct SingleLinkedList
int nodes_count;
struct Node *head;
list;
这个抽象列表被用作一些 Bob 东西的容器。:)
【讨论】:
【参考方案2】:这看起来像“模块”(或“类”,如果你愿意的话)状态,用于维护一堆整数的单链表。
当然命名很糟糕,应该是e.g.
struct list_node
int myNum;
struct list_node *next;
;
static struct
int theNum;
struct list_node *lists;
listState;
请注意,名称(“struct tag”)bob_stuff
毫无意义且令人困惑,可能应该删除。如果你想要一个static
,因此是struct
类型的局部变量,那么这个标签很可能无论如何都没有用。
【讨论】:
谢谢你把它弄明白了。 myNum 是否是静态的?我的猜测不是因为 list_node 结构的一部分不是静态的,即使它是 listState 变量中包含的列表的一部分。 没有关于struct list_node
"is static
",这只是一个被声明的类型。 listState
是一个静态变量,包含指向该类型值的指针这一事实不会改变类型声明本身。以上是关于这个静态结构的目的是啥?的主要内容,如果未能解决你的问题,请参考以下文章