c - 指向结构数组并获取内存的指针

标签 c pointers

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/

相关文章:

在 C 中编译多个源

c - 为什么数组的地址等于它在 C 中的值?

c# - 如何将 int * 传递给参数类型为 int [] 的函数?

c++ - 指针数组的问题

c - 跳过空格并在 C 中一次返回一个单词

c - 在 ')' 之前预期为 'or'

c - 将 C 字符数组拆分为单词

c++ - NULL 指针的取消引用是否也等于 NULL?

c - 为什么我不能使用此代码覆盖字符串?

CBC-MAC 在 C 中的实现