【问题标题】:Create structures in loop without naming them在循环中创建结构而不命名它们
【发布时间】:2017-03-30 08:15:14
【问题描述】:

假设我想在循环中创建结构。我不想在每个循环中更改结构变量的值,我想创建新的。然而,根据我所学到的知识,我必须为我制作的每一个新结构命名。有没有办法在不命名结构的情况下做到这一点?

更具体地说,我可以在每个结构中都有一个指向下一个结构的指针吗?

我想做的是一个 BST,我的结构是我添加到树中的每个新节点。这就是我看到人们用结构做的方式。如果我不命名节点,如何添加节点?我肯定有一些空白。

【问题讨论】:

  • 创建结构定义?或者创建结构instances?您能否展示一些您想要的伪代码?
  • @JohnKatsantas 进行澄清,请不要发布 cmets,而是编辑您的问题。
  • 您可能正在寻找这些概念:动态分配、堆、malloc。该网站不是按需教程,因此请尝试使用谷歌搜索。
  • 也许可以向我们展示您的结构现在是什么样子,然后也许我们可以更好地理解您的问题?

标签: c struct


【解决方案1】:

您可以在循环中多次使用结构变量,方法是使用 malloc() 为每次迭代分配内存

#include<stdio.h>
#include<stdlib.h>
struct structname
{
int a;
struct structname* b;  //points to next struct
};
int main()
{
struct structname* ptr[10]; //
for(int i=0; i<10; i++)
    {
     ptr[i] = (struct structname*)malloc(sizeof(struct structname));
     ptr[i]->a=1;
     ptr[i]->b=NULL; //point to next struct instead of NULL
    }
}

但是,如果您事先知道 struct 的数量,您可以创建一个数组来保存 struct s

#include<stdio.h>
#include<stdlib.h>
struct structname
{
int a;
};
int main()
{
 struct structname array[10];
for(int i=0; i<10; i++)
    {
     array[i].a = 1; //input number here
    //no need of pointing to next struct as its already in an array
     }
}

【讨论】:

  • 我在以下行中遇到错误:struct structname array[10]。数组类型的元素类型不完整。
  • 问题出在我上面提到的那一行。我认为这是因为我们没有声明数组。这里的数组是什么类型的?
  • 如果我们要声明一个整数数组,我们写“int arrayname[];”。但是当我们要声明一个结构体数组时,我们会写“struct structname arrayname[];”。这里数组的类型是“struct structname”
  • 它不起作用。它说数组的元素类型不完整。
  • 出现这个错误是因为在c语言中需要指定数组大小。你确定你复制的代码正确吗?
【解决方案2】:

如果我理解您的问题,答案是否定的,您不能声明没有名称的结构。关于指向下一个结构成员的指针,您应该阅读更多关于 C 中的列表和双链表的信息 http://www.learn-c.org/en/Linked_lists

【讨论】:

    【解决方案3】:

    标识符规则

    1. 标识符只能包含字母数字字符(a-z、A-Z、0-9)和下划线(_)。
    2. 标识符的第一个字符只能包含字母(a-z、A-Z)或下划线(_)。
    3. 标识符在 C 中也区分大小写。例如 name 和 Name 是 C 中的两个不同标识符。
    4. 关键字不允许用作标识符。
    5. 不允许在标识符中或作为标识符使用特殊字符,例如分号、句点、空格、斜杠或逗号。

    所以,要回答你的问题,你不能在不识别它们的情况下创建新结构,即使你能做到,你会用什么来引用它? 如果没有任何东西指向它,那只是在内存中占用空间的垃圾

    【讨论】:

    • 正如我所说,我正在尝试制作 BST。我的第一个结构将命名为 root,它将是树的根,它包含一个指向下一个结构的指针,每个新结构都包含一个指向下一个结构的指针。
    • 每个节点只有 1 个子节点的 BST?
    • 不,我最终会创建一个带有左右孩子的 BST。我现在遇到的问题是指向一个没有命名的新结构。
    • 如果你不能识别它,你就不能指向它。在我看来,使用数组或包含结构的类似数据结构可能是更好的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-14
    • 2018-01-26
    • 1970-01-01
    相关资源
    最近更新 更多