【问题标题】:Using typedef with pointers in C [duplicate]在 C 中使用带有指针的 typedef [重复]
【发布时间】:2020-03-21 18:03:54
【问题描述】:

我现在正在学习指针和列表。我有一个关于 typedef 关键字的问题。

typedef int data;
typedef struct nodo *lista;
struct nodo {
  data el;
  struct nodo *next;
};

如果我写下来:

lista l;

l 是指针还是结构类型。我想知道 typedef struct nodo *lista; 部分将 lista 定义为结构类型或结构的指针?

【问题讨论】:

  • 从不 typedef 指针。这样只会让你更容易犯错。也许这样做的唯一真正原因可能是函数指针。
  • 我想知道第二行代码是做什么的。
  • lista l;struct nodo *l; 相同。现在哪一个更容易理解?在第一种情况下你不知道l 是否是一个指针,在第二种情况下你知道。
  • 奇怪的是结构定义没有使用lista 代替struct nodo *。不完全是错误的,但有点出乎意料。

标签: c pointers


【解决方案1】:

之后

typedef struct nodo *lista;

listastruct nodo * 的另一个名称。

所以lista l;struct nodo *l; 相同。

【讨论】:

    【解决方案2】:

    它将lista 定义为指向struct nodo指针,因为*

    如果它被定义为:

    typedef struct nodo lista;
    

    lista 只是一个结构体。

    【讨论】:

      【解决方案3】:

      去掉关键字typedef,你会得到一个指向struct nodo类型对象的指针声明。

      struct nodo *lista;
      

      当使用关键字 typedef 时

      typedef struct nodo *lista;
      

      那么,您将引入struct nodo * 类型的别名,而不是声明struct nodo * 类型的对象。

      所以不要写例子

      struct nodo *head;
      

      你可以写

      lista head;
      

      【讨论】:

        猜你喜欢
        • 2016-01-16
        • 2011-07-03
        • 2011-11-29
        • 2016-01-07
        • 1970-01-01
        • 2023-04-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多