问题描述
我想创建一个链表,其中包含类似可变长度数组的 int A[n][n]
。
我尝试这样做,但我收到错误 Incomplete type is not allowed
。
struct Node {
int A[n][n];
struct Node* next;
};
有没有办法在 c 中做到这一点?
解决方法
您需要使用在堆上分配的 int **
以获得可变长度。为此,您需要一个构造函数和一个析构函数。我还添加了在构造函数中指定下一个节点的功能。
struct Node{
size_t size;
int **A;
struct Node* next;
};
void construct_node(struct Node *node,size_t n,struct Node *next_node) {
node->size = n;
node->A = malloc(n * sizeof(int *));
for (size_t i = 0; i < n; i++) {
node->A[i] = malloc(n * sizeof(int));
}
node->next = next_node;
}
void destruct_node(struct Node *node) {
for (size_t i = 0; i < node->size; i++) {
free(node->A[i]);
}
free(node->A);
// You probably also want to call destruct_node on the next node to free the entire list:
// if (node->next) destruct_node(node->next);
}
执行此操作后,将需要以下代码来创建您的节点:
int size = 10;
struct Node your_node;
construct_node(&your_node,size,NULL);
// Do your stuff with the node
destruct_node(&your_node);