c - 如何使用 malloc 分配结构数组

标签 c arrays struct

我有一个结构:

struct line{
  bool isValid;
  int tag;
  int block;
};
typedef struct line* L;

我想设置一个带有名称集的struct line*数组。

也就是说我要初始化L set[];,然后声明一个集合L* cache[]的数组。

因此,在函数 cache_new(int numSets, int numLines) 中,我想使用 malloc() 初始化它们,我该怎么做?刚接触 C,任何帮助将不胜感激。

最佳答案

如果你的数组是用[]声明的,那么你就不能动态分配它。 [] 表示数组将自动或静态分配。

要动态分配一些归零的结构,您应该这样做:

struct line *set = calloc(num_lines, sizeof *set);

使用动态分配,数组本身没有名称,但是使用指向其第一个元素的指针set,您仍然可以访问所有数组成员。

我不太清楚您所询问的有关缓存的内容,但也许应该是:

struct line **cache = calloc(num_sets, sizeof *cache);
for (size_t i = 0; i < num_sets; ++i)
    cache[i] = calloc(num_lines, sizeof *cache[i]);

请不要使用指针类型定义,它们会使代码难以阅读。如果需要,您可以typedef struct line Line;。无论您执行 calloc(N, size) 还是 malloc(N * size),这并不重要。

然后您可以使用 [] 表示法访问这些数组,例如缓存[3][5].tag = 7;

关于c - 如何使用 malloc 分配结构数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24304899/

相关文章:

arrays - 读取一个 excel 列并将其唯一值放入一个数组中

C - 动态结构中的相同数据

c - 程序构建得很好,但它写的是空白屏幕

c - 如何在 C 中打印 double 数组?

c++ - 哪些提升类型用于 switch-case 表达式比较?

c - 我的链表实现有什么问题?

javascript - 从二维数组重新创建一个数组

java - JAVA中 `type a[]`和 `type[] a`有什么区别

c - header 防护是否仅限于各自库的范围?

c# - "where T : class"在编译时或运行时没有以任何方式强制执行吗?