【问题标题】:typedef struct claritytypedef 结构清晰度
【发布时间】:2011-07-29 23:20:17
【问题描述】:

我对 typedef 感到困惑,任何人都可以将其转录为正常的作品吗?结构?我真的不想处理 typedef,因为它让我感到困惑

struct stackNode
{
  int data;
  struct stackNode *nxtptr;
};

typedef struct stackNode StackNode;
typedef StackNode *StackNodePtr;

是

typedef struct stackNode StackNode; 与struct stackNode StackNode 相同 而typedef StackNode *StackNodePtr; 和struck stackNode *StackNodePtr 一样吗??

【问题讨论】:

    标签: c linked-list typedef


    【解决方案1】:

    如果您不想使用typedef,您可以随时使用完整的类型名称:

    代替:

    StackNode sn;
    

    你会使用:

    struct stackNode sn;
    

    代替:

    StackNodePtr snp;
    

    你会使用:

    struct stackNode *snp;
    

    声明完全相同。

    【讨论】:

    • soo typedef struct stackNode StackNode;将是struct stackNode StackNode?和 typedef StackNode *StackNodePtr;将是 struct stackNode *StackNodePtr;我说的对吗?
    • 记住:typedef 您只是在创建/定义/重命名新的类型,而不是新的变量。
    • @PabloSantaCruz 新类型 names,而是。
    【解决方案2】:

    更常见的写法是:

    typedef struct stackNode
    {
      int data;
      struct stackNode *nxtptr;
    
    } StackNode_t;
    

    其中stackNode 是所谓的“结构标记”,StackNode_t 是类型的实际名称。如果你声明这样的结构,程序的其余部分就不需要关心结构标签,你可以像使用 StackNode_t 一样使用 nxtptr。

    【讨论】:

      【解决方案3】:
      typedef struct stackNode
      {
        int data;
        struct stackNode *nxtptr;
      
      } StackNode_t;
      

      如果你不想在结构中包含“struct stackNode”,我发现我可以这样做:

      typedef struct STACKNODE STACKNODE;
      typedef struct STACKNODE
      {
        int data;
        STACKNODE *nxtptr;
      };
      

      您可以编写这样的代码,而且它编译得很好,而且运行得很好,这似乎违反直觉。这可能与直觉相反,因为我对 struct STACKNODE 和 typedef STACKNODE 使用了相同的名称。此外,我正在 typedef-ing struct before 它作为定义存在。尽管如此,我发现我可以使用 Microsoft 的 C 到今天的许多版本和 Borland C(当时的方式)来做到这一点。

      我喜欢它,因为如果我已经要对结构进行 typedef,我不喜欢在结构定义中使用“struct STACKNODE *nxtptr”(即使用单词“struct”)。

      【讨论】:

      • 我认为这几乎是我发现的将 typedef 与链表一起使用的两种选择。 +1
      • 你不应该真正使用没有名字的typedef,所以第二个语句应该只是struct STACKNODE { … };(省略typedef)。就目前而言,你有一个空洞的typedef,一些编译器会警告它。就个人而言,我不会使用全大写的名称。我为宏和枚举常量保留全大写。
      【解决方案4】:

      使用 typedef,您将 StackNode 定义为 struct stackNode,并将指针 StackNodePtr 定义为 StackNode。

      那么还有什么不清楚的地方?

      【讨论】:

        【解决方案5】:

        好吧,简单解释一下:Typedef 基本上什么都不做,然后告诉编译器您创建了一种新类型的变量(例如 int、char 等)

        使用typedef的主要原因是

        • 助记符名称。这也经常用于库函数中。不用像 int 或 long 这样的标准类型,您只需将其 typedef 到 size_t 中。所以这个变量的用途就更清楚了。
        • 缩短名称。通常用于结构之类的东西(这就是你的情况)。为了避免总是必须键入 struct myStruct varname,您可以轻松地使用 typedef 来摆脱前面的结构。

        【讨论】:

          【解决方案6】:

          看看typedef 是否有帮助。更像是 101。标有“使用问题”的部分可能会对您的问题提供一些见解。

          【讨论】:

            猜你喜欢
            • 2019-02-17
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2023-02-25
            • 1970-01-01
            • 1970-01-01
            • 2013-07-27
            • 1970-01-01
            相关资源
            最近更新 更多