Cで小さな割り当てがあります。構造体へのポインターの配列を作成しようとしています。私の質問は、各ポインタをNULLに初期化するにはどうすればよいですか?また、配列のメンバーにメモリを割り当てた後、配列要素が指す構造体に値を割り当てることができません。
#include <stdio.h>
#include <stdlib.h>
typedef struct list_node list_node_t;
struct list_node
{
char *key;
int value;
list_node_t *next;
};
int main()
{
list_node_t *ptr = (list_node_t*) malloc(sizeof(list_node_t));
ptr->key = "Hello There";
ptr->value = 1;
ptr->next = NULL;
// Above works fine
// Below is erroneous
list_node_t **array[10] = {NULL};
*array[0] = (list_node_t*) malloc(sizeof(list_node_t));
array[0]->key = "Hello world!"; //request for member ‘key’ in something not a structure or union
array[0]->value = 22; //request for member ‘value’ in something not a structure or union
array[0]->next = NULL; //request for member ‘next’ in something not a structure or union
// Do something with the data at hand
// Deallocate memory using function free
return 0;
}
ここに:
list_node_t **array[10] = {NULL};
構造体へのポインターへの10個のポインターの配列を宣言しています。必要なのは、構造体への10個のポインターの配列です。
list_node_t *array[10] = {NULL};
はい、array
は実際にはポインターへのポインターですが、角括弧表記はCでの抽象化のようなものであるため、混乱を招きます。したがって、array
は単なる配列と考える必要があります。ポインタの。
この行で逆参照演算子を使用する必要もありません。
*array[0] = (list_node_t*) malloc(sizeof(list_node_t));
Cは、角かっこ表記で逆参照するためです。したがって、次のようになります。
array[0] = (list_node_t*) malloc(sizeof(list_node_t));
この線 list_node_t **array[10] = {NULL};
が間違っています-ここで宣言しますリストノードへのポインタへのポインタの配列。これを次のものに置き換えます。
list_node_t *array[10] = { NULL };
そしてそれはうまくいくはずです。