如何在C中创建结构的新实例

Rob*_*ang 13 c struct instance

在C中,定义结构时.创建新实例的正确方法是什么?我见过两种方式:

struct listitem {
    int val;
    char * def;
    struct listitem * next;
};
Run Code Online (Sandbox Code Playgroud)

第一种方式(xCode说这是重新定义结构和错误):

    struct listitem* newItem = malloc(sizeof(struct listitem));
Run Code Online (Sandbox Code Playgroud)

第二种方式:

    listitem* newItem = malloc(sizeof(listitem));
Run Code Online (Sandbox Code Playgroud)

或者,有另一种方式吗?

Pro*_*ife 14

这取决于你是否想要一个指针.

最好像这样调用你的结构:

Typedef struct s_data 
{
    int a;
    char *b;
    etc..
}              t_data;
Run Code Online (Sandbox Code Playgroud)

之后将其设置为无指针结构:

t_data my_struct;
my_struct.a = 8;
Run Code Online (Sandbox Code Playgroud)

如果你想要一个指针,你需要像那样malloc:

t_data *my_struct;
my_struct = malloc(sizeof(t_data));
my_struct->a = 8
Run Code Online (Sandbox Code Playgroud)

我希望这回答你的问题


小智 13

第二种方式只有在你使用时才有效

typedef struct listitem listitem;
Run Code Online (Sandbox Code Playgroud)

在声明具有类型的变量之前listitem.您也可以静态分配结构而不是动态分配它:

struct listitem newItem;
Run Code Online (Sandbox Code Playgroud)

您演示的方式就像为每个int想要创建的内容执行以下操作:

int *myInt = malloc(sizeof(int));
Run Code Online (Sandbox Code Playgroud)

  • 请注意,以 `_t` 结尾的名称是为实现保留的,应该避免使用。请参阅 http://stackoverflow.com/a/12727104/1701799。 (3认同)

小智 5

除了其他答案之外,我还想添加两种更紧凑的创建实例的方法。例子:

struct Person{
    float position[2];
    int age;
    char name[20];
}
struct Person p1 = { {4, 1.1}, 20, "John" };
struct Person p2 = { .age=60, .name="Jane", .position={0, 0} };
printf("%s, aged %i, is located at (%f, %f)\n", p1.name, p1.age,p1.position[0], p1.position[1] );
printf("%s, aged %i, is located at (%f, %f)\n", p2.name, p2.age,p2.position[0], p2.position[1] );
Run Code Online (Sandbox Code Playgroud)

输出:

John, aged 20, is located at (4.000000, 1.100000)
Jane, aged 60, is located at (0.000000, 0.000000)
Run Code Online (Sandbox Code Playgroud)

请注意,p1属性的顺序与结构定义的顺序相匹配。如果您不想在使用类型时始终键入 struct,则可以使用定义一个新别名

typedef struct Person SomeNewAlias;
SomeNewAlias p1;
Run Code Online (Sandbox Code Playgroud)

你可以将新别名命名为与旧名称相同的名称即可

typedef struct Person Person;
Person p1;
Run Code Online (Sandbox Code Playgroud)