web-dev-qa-db-ja.com

Cで構造体の新しいインスタンスを作成する方法

Cでは、構造体を定義します。新しいインスタンスを作成する正しい方法は何ですか?私は2つの方法を見てきました:

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

最初の方法(xCodeは、これが構造体と間違ったものを再定義していると言っています):

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

2番目の方法:

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

または、別の方法がありますか?

12
Robin Huang

2番目の方法は、使用した場合にのみ機能します

typedef struct listitem listitem;

listitem型の変数の宣言の前。構造を動的に割り当てるのではなく、単に静的に割り当てることもできます。

struct listitem newItem;

これまでに示した方法は、作成するintごとに以下を実行するようなものです。

int *myInt = malloc(sizeof(int));
13
user539810

ポインタが必要かどうかによって異なります。

次のように構造体を呼び出すことをお勧めします。

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

あなたの質問に対するこの答えを願っています

14
Prog_is_life
struct listitem newItem; // Automatic allocation
newItem.val = 5;

構造体の簡単な概要は次のとおりです。 http://www.cs.usfca.edu/~wolber/SoftwareDev/C/CStructs.htm

2
Scott G.