这个静态结构的目的是啥?

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 是一个静态变量,包含指向该类型值的指针这一事实不会改变类型声明本身。

以上是关于这个静态结构的目的是啥?的主要内容,如果未能解决你的问题,请参考以下文章

Enum Singleton中静态getInstance方法的目的是啥?

静态方法的受保护修饰符的目的是啥

在结构中使用联合的目的是啥?

这个场景中默认关键字的目的是啥[重复]

在这个判断函数中这个接收语句fullfil的目的是啥?

ProtoMessage 方法的目的是啥?