Tôi có một bài tập nhỏ trong C. Tôi đang cố gắng tạo một mảng các con trỏ tới một cấu trúc. Câu hỏi của tôi là làm thế nào tôi có thể khởi tạo mỗi con trỏ để NULL? Ngoài ra, sau khi tôi cấp phát bộ nhớ cho một thành viên của mảng, tôi không thể gán giá trị cho cấu trúc mà phần tử mảng trỏ đến.Làm thế nào tôi có thể khai báo và khởi tạo một mảng con trỏ tới một cấu trúc trong C?
#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;
}
Đó là câu trả lời hay, ngoại trừ 'mảng' là ** không **" thực sự là một con trỏ tới con trỏ ". 'mảng' thực sự là một mảng, không phải là một con trỏ của bất kỳ loại nào. Các loại mảng khi được sử dụng trong một biểu thức được đánh giá đến một con trỏ đến phần tử đầu tiên của mảng, nhưng một mảng vẫn là một kiểu thực, khác biệt với các con trỏ. 'mảng sizeof' sẽ giúp thuyết phục bạn rằng' mảng' không phải là một con trỏ. – caf
thay vì 'mảng [0] = (list_node_t *) malloc (sizeof (list_node_t));' nó phải là 'mảng [0] = malloc (sizeof (list_node_t));' Không typecast malloc cuộc gọi. –