繁体   English   中英

C语言中的struct的指针数组

[英]Array of pointers to struct in C

我的c代码中有一个约300Bytes(5xint + 256chars)的结构,并且我希望有一个很好的数组机制来处理该结构的所有“对象”。 我想要一个全局的指针数组,这样一来数组中的所有索引都指向NULL,但是当我需要它时,我会初始化每个索引(malloc),在我完成它时将其删除(免费)。

typedef struct myfiles mf;
mf* myArr[1000];

我在找什么吗? 指针与数组混合经常使我感到困惑。 如果是这样,只是为了澄清一下,

mf myArr[1000];

已经在堆栈上分配了1000个结构,而我的第一个建议仅分配了1000个指针?

你是对的。 前者分配1000个指针,没有一个被初始化,后者则初始化1000个每个〜300字节的对象。

foo_t* foo[1000] = {NULL};为null: foo_t* foo[1000] = {NULL};

但这仍然很愚蠢。 为什么不只是mf* myArr = NULL 现在,您有一个指向未初始化内存的指针,而不是1000个指向初始化内存的指针,还有一个指针可以跟踪。 你愿意吗

myArraySingle = malloc(sizeof(mf)*1000); 要么

for(int i = 0; i < 1000; i++) {
    myArray[i] = malloc(1000);
}

并通过myArraySingle[300]或*(myArray [300])`访问? 无论如何,除了语法之外,不要创建这种不必要的间接寻址。 单个指针可以指向包含一系列对象的连续内存,就像数组一样,这就是为什么指针支持数组样式语法以及为什么数组索引从0开始的原因。

typedef struct myfiles mf;
mf* myArr[1000];

这就是您要寻找的。 这将为结构mf分配1000个指针的数组。

您似乎理解正确。

更准确地说,我相信mf* myArr[1000] = { 0 }; 会更好地满足您的要求,因为您希望保证所有元素都将初始化为空指针。 没有初始化,这种保证就不存在。

C中没有“全局”。您指的是具有静态存储持续时间的对象,在文件作用域声明。

typedef struct myfiles mf;
mf* myArr[1000];

是的,它将初始化1000个指针,使用前必须使用malloc / calloc为每个指针分配内存。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM