我在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;
}
答案 0 :(得分:12)
下面:
list_node_t **array[10] = {NULL};
你正在声明一个指向你的struct指针的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));
答案 1 :(得分:2)
第list_node_t **array[10] = {NULL};
行是错误的 - 在这里你声明指向列表节点指针的指针数组。将其替换为:
list_node_t *array[10] = { NULL };
它应该有用。