Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 初始化typedef结构_C_Struct - Fatal编程技术网

C 初始化typedef结构

C 初始化typedef结构,c,struct,C,Struct,为什么这样做有效: struct person { char name[50]; short mental_age; } p1 = {"Donald", 4}; 但不是这个: typedef struct { char name[50]; short mental_age; } PERSON p1 = {"Donald", 4}; 当我定义这个结构时,有没有一种方法可以创建一个typedef结构并初始化它?typedefs是其他类型的别名。您所做的是创建一个方

为什么这样做有效:

struct person {
    char name[50];
    short mental_age;
} p1 = {"Donald", 4};
但不是这个:

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

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

typedef
s是其他类型的别名。您所做的是创建一个方便的
typedef
。由于
typedef
的目的是创建类型别名,因此不能使用它定义变量

你必须这样做:

typedef struct {
    // data
} mytype;

mytype mydata = {"Donald", 4};

据我所知,最好的方法是将严格定义从typedef语句和struct声明中分离出来,类似于:

struct sPerson
{
    char name[50];
    short mental_age;
};

typedef struct  sPerson PERSON;

PERSON  p1 = {"Donald", 4};

学究,但你在这里是定义变量,而不是声明它。@Ben,是的,你是对的。我不是以英语为母语的人,老实说,我几乎看不出这两个词之间的区别,所以我有时会把它们弄混。@Ben:你错了。在C语言中,定义和声明的概念并不相互排斥。定义只是一种特殊的声明。因此,在他的例子中,他声明了一个变量
mydata
。变量
mydata
的声明恰好同时是一个定义。@AnT,呃,听起来更让人困惑。我知道什么是函数声明,但是变量声明/定义呢?那些是不同的东西吗?@ForceBru:那也错了<代码>mtype mydata也是一个定义(即,它是一个恰好是定义的声明)
mydata=1
与声明和定义完全无关。在过于简单的形式中,定义是为对象保留内存的声明。这个对象是否初始化并不重要。