如何创建结构的新实例

How to create a new instance of a struct

创建结构的新实例的正确方法是什么?给定结构:

struct listitem {
    int val;
    char * def;
    struct listitem * next;
};

我见过两种方法..

第一种方式(xCode说这是重新定义struct,错误):

struct listitem* newItem = malloc(sizeof(struct listitem));

第二种方式:

listitem* newItem = malloc(sizeof(listitem));

或者,还有其他方法吗?

第二种方法只有在您使用

时才有效
typedef struct listitem listitem;

在类型为 listitem 的变量的任何声明之前。您也可以只静态分配结构而不是动态分配它:

struct listitem newItem;

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

int *myInt = malloc(sizeof(int));
struct listitem newItem; // Automatic allocation
newItem.val = 5;

以下是对结构的简要介绍: http://www.cs.usfca.edu/~wolber/SoftwareDev/C/CStructs.htm

这取决于你是否需要指针。

最好这样称呼你的结构:

typedef struct s_data 
{
    int a;
    char *b;
    // etc..
} t_data;

将其实例化为无指针结构后:

t_data my_struct;
my_struct.a = 8;

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

t_data *my_struct;
my_struct = malloc(sizeof(t_data));
my_struct->a = 8

我希望这能回答你的问题。

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

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] );

输出:

John, aged 20, is located at (4.000000, 1.100000)
Jane, aged 60, is located at (0.000000, 0.000000)

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

定义新别名
typedef struct Person SomeNewAlias;
SomeNewAlias p1;

你可以把新的别名叫做旧的别名就好了

typedef struct Person Person;
Person p1;