【问题标题】:Initialize typedef struct初始化 typedef 结构
【发布时间】:2016-03-12 11:14:12
【问题描述】:

为什么会这样:

struct person {
    char name[50];
    short mental_age;
} p1 = {"Donald", 4};

但不是这个:

typedef struct {
    char name[50];
    short mental_age;
} PERSON p1 = {"Donald", 4};

有没有一种方法可以在我定义这个结构时创建一个 typedef 结构并初始化 Donald?

【问题讨论】:

    标签: c struct


    【解决方案1】:

    typedefs 是其他类型的别名。你正在做的是创造一个便利typedef。由于typedef 的目的是创建type 别名,因此您不能使用它定义变量

    你必须这样做:

    typedef struct {
        // data
    } mytype;
    
    mytype mydata = {"Donald", 4};
    

    【讨论】:

    • 迂腐,但你在这里定义一个变量,而不是声明它。
    • @Ben,是的,你是对的。我不是以英语为母语的人,老实说,我几乎看不出这两个词之间的区别,所以我有时会混淆它们。
    • @Ben:你错了。在 C 语言中,definitiondeclaration 的概念并不相互排斥。 定义只是一种特殊的声明。因此,在他的情况下,他声明一个变量mydata。变量mydata声明恰好同时是一个定义
    • @AnT,呃,这听起来更加令人困惑。我知道函数声明是什么,但是变量声明/定义呢?这些是不同的东西吗?
    • @ForceBru:这也是错误的。 mtype mydata; 也是一个定义(即它是一个恰好是一个定义声明)。 mydata = 1 与声明和定义完全无关。在简单的形式中,definition 是为对象保留内存的声明。这个对象是否被初始化并不重要。
    【解决方案2】:

    据我所知,最好的方法是将严格定义与 typedef 语句与结构声明分开,类似于:

    struct sPerson
    {
        char name[50];
        short mental_age;
    };
    
    typedef struct  sPerson PERSON;
    
    PERSON  p1 = {"Donald", 4};
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多