我有一个结构:
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/