link
是指向节点的指针
typedef struct node * link;
在 main() 中,我有以下代码(config->m 只是一些整数):
// array of pointers to structs
link heads[config->m];
// make memory for head nodes
for(i = 0; i < config->m; i++)
heads[i] = malloc(sizeof(struct node));
代码有效(很棒)。 但是有没有一种方法可以在不循环的情况下分配config->m
block 内存?我试过了
link heads[config->m];
heads = malloc(sizeof(struct node) * config->m);
但是我友好的邻居编译器告诉我赋值中的类型不兼容
我知道我可以用
struct node heads[config->m];
但我想用指针来做这些事情。
和往常一样,有人会问我这是否是家庭作业的一部分,答案是肯定的(有点)。但是这个特定的代码块与实际的分配没有任何关系;这是为了我自己的启蒙。但感谢您的提问:|
最佳答案
不,你需要循环。您的 heads 数组本质上是一个二维数组。您至少需要两次分配。第一个是指针数组:
link * heads = (link*)malloc (config->m * sizeof (link));
第二个是heads数组的每个成员指向的内存:
link buf = (link)malloc(sizeof(struct node) * config->m);
for(i = 0; i < config->m; i++)
heads[i] = &buf[i];
然后取消分配:
free(heads);
free(buf);
关于c - 指向结构数组并获取内存的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/750091/