我有一个功能,该功能应该创建结构并将其存储在结构数组中。
可以说这是我的结构:
struct str {
...
};
该函数采用如下所示的参数:
struct str **ptr
如果我正确理解,它是指向结构的指针,我应该将此参数设置为指向结构数组的第一个元素,该元素将是该数组中的第一个结构。
因此,如果参数看起来像这样,则意味着我不仅拥有一个结构数组,还拥有一个指向该结构的指针数组,对吗?
现在,我已声明了指向此类结构的指针数组:
struct str *structures[20];
因为我希望在那里存储20个(指向)结构。
然后,我有一个循环,为结构分配内存并将其存储在数组中,如下所示:
struct str *structure;
structure = malloc(sizeof(struct str));
然后我像这样填写我想要的结构的参数:
structure->a = 1; structure->b = 2; .........
然后将其存储在数组中,如下所示:
structures[n] = structure;
我通过在每个循环中从结构中打印一个参数来确保它存储在数组中我想要的位置,如下所示:
printf("%d\n", structures[7]->a);
我的问题是,如何将函数的参数设置为指向该数组中结构的第一个指针?
我说对了吗?
另外,该参数需要从main中获取。
而且我还需要处理此功能之外的数组的这些(指向)结构。
参数将是什么样的?
struct str *pointer;
?
另外,难道不能仅仅将指针指向数组本身,而应该自动指向数组中的第一个元素吗?
这样我便可以通过指针引用数组的第n个成员,因为以后需要与所有这些成员一起工作?
我已经看过这个主题了,但是我还是有些困惑,因此,我希望收到任何反馈。
通过阅读此内容,我发现您的帖子中存在一些不一致之处:
为什么要创建指向您的结构的指针数组,而不是简单的结构数组?也就是说,假设您的结构具有以下声明:
struct myStruct {
int x;
int y;
};
如果要创建这些结构的数组,请执行以下操作:
//dynamic
struct myStruct* myArray = malloc(20*sizeof(struct myStruct));
//static
struct myStruct* myArray[20];
请注意,它们都返回一个指向数组第一个元素(类型为struct myStruct
)的指针。您的数组是struct myStruct
元素数组,而不是的数组struct myStruct*
。
struct myStruct
实际上,大小为20的元素数组仅是足以容纳20个struct myStruct
元素并由指向第一个元素的指针表示的连续内存。由于内存是连续的,因此您可以通过myArray[0]
或来访问数组的'nth'元素*(myArray+n)
(之所以可能,是因为“数组”不过是指向连续内存的第一个元素的指针...所以“添加” 1给定类型的指针将为您提供下一个元素的内存地址,您可以使用*运算符将其引用以获取元素本身)。
为结构数组分配一次内存比创建一个指向结构的指针数组要容易得多(更不用说更快了)。然后修改它们到位。
因此,一个接收数组并递增第5个和第6个元素的函数可能看起来像:
void modifyStructs (struct myStruct* myArray)
{
//modify the fifth struct:
++myArray[4].x;
//modify the sixth struct:
++myArray[5].x;
}
几次需要指针数组的时间是:
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句