指向结构数组中的第一个结构?

大东

我有一个功能,该功能应该创建结构并将其存储在结构数组中。

可以说这是我的结构:

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;
}

几次需要指针数组的时间是:

  1. 创建多维数组。即使这样,这对于高速缓存性能还是很不利的……最好创建一个一维数组并定义一个用于访问元素的宏。BLAS / LAPACK可以做到这一点。
  2. 创建一个数组,其中某些元素应为NULL,并且您不使用结构。如果您使用的是结构,最好定义一个字段以标识您的结构是否已填充,并使用简单的结构数组会更好。
  3. 创建一个数组来访问大量项目,但是您还不想分配所有内存。在这里,您实际上别无选择。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

从指向结构中其他变量的指针访问结构的第一个变量

将指针指向结构的第一个元素

通过指向第一个结构的指针初始化结构内的结构

C / C ++指向POD结构的指针也指向第一个结构成员

从文件读取到结构只写入数组中的第一个结构

指向C中数组的第一个元素

将指向结构的第一个成员的指针强制转换为指向该结构的指针是否合法?

对于某些ATmega 2560,第一个索引中的结构数组数据被重置

将指向结构的指针转换为其第一个成员

将两个对象数组列表与第一个数组中的结构字段合并

查找数组的第一个和最后一个结构

在结构联合中访问结构的第一个字段

如何遍历JSON结构以访问结构中的第一个日期?

结构中的指针指向另一个结构

GLSL统一结构数组仅定义第一个元素

从IntPtr整理结构的数组-仅第一个值正确地整理

在第一个索引之后未填充结构数组索引

结构指针数组作为struct的第一个元素

指向数组第一个元素之前的指针

包含第一个的结构化类型

共享相同的第一个成员的结构的联盟

在层次结构中查找第一个元素,而不是在子级中

如何访问结构中不是第一个元素-Qsort

如何获取和删除数据结构中的第一个元素?

最后输入会覆盖结构中的第一个输入

搜索仅返回结构C中的第一个结果

当多个处于层次结构中时,Espresso匹配找到的第一个元素

在VS调试器中不可见的结构的第一个成员

将二进制文件读取到结构列表中,但Deepcopy会覆盖第一个结构