C中的结构具有初始值

Lay*_*yla 37 c struct

我想用C创建一个结构,初始值如下:

typedef struct {
    int id = 0;
    char *name = "none";
} employee;
Run Code Online (Sandbox Code Playgroud)

我知道以上是不可能的,有没有其他方法可以做到这一点?

MOH*_*MED 44

你不能这样做

请改用以下内容

typedef struct
{
   int id;
   char* name;
}employee;

employee emp = {
.id = 0, 
.name = "none"
};
Run Code Online (Sandbox Code Playgroud)

您可以使用宏来定义初始化实例.每次要定义新实例并初始化它时,这将使您更容易.

typedef struct
{
   int id;
   char* name;
}employee;

#define INIT_EMPLOYEE(X) employee X = {.id = 0, .name ="none"}
Run Code Online (Sandbox Code Playgroud)

在您的代码中,当您需要使用员工类型定义新实例时,您只需将此宏称为:

INIT_EMPLOYEE(emp);
Run Code Online (Sandbox Code Playgroud)


Alo*_*ave 22

结构是一种数据类型.您不为数据类型赋值.您为数据类型的实例/对象赋值.
所以在C中不可能做到这一点.


Don*_*nie 13

你可以做:

struct employee_s {
  int id;
  char* name;
} employee_default = {0, "none"};

typedef struct employee_s employee;
Run Code Online (Sandbox Code Playgroud)

然后,您只需记住在声明新的员工变量时执行默认初始化:

employee foo = employee_default;
Run Code Online (Sandbox Code Playgroud)

或者,您可以始终通过工厂函数构建员工结构.


Omk*_*ant 7

如果您正在使用,gcc您可以提供designated initializers对象创建.

typedef struct
{
   int id=0;
   char* name="none";
}employee;

employee e = 
{
 .id = 0;
 .name = "none";
};
Run Code Online (Sandbox Code Playgroud)

或者,只需使用类似数组初始化.

employee e = {0 , "none"};