【问题标题】:Enter size of an array in a struct在结构中输入数组的大小
【发布时间】:2016-11-05 19:31:16
【问题描述】:

我在结构中有一个数组,我想通过用户的输入输入它的大小。

struct queue
{
    int maxSize;
    int count;
    int* element;
};

element 是数组,现在我想将它的大小设置为“5”并将所有“5”单元格初始化为“0”

    struct queue q;

    *element -> ??

【问题讨论】:

  • 选择一种语言,CC++。它们不是一回事,如果是 C++,答案可能会有所不同。

标签: c++ c arrays pointers struct


【解决方案1】:

您将您的问题标记为C++,所以这里有一个C++ 解决方案。忘记指针,直接使用std::vector<int>

#include <vector>
struct queue
{
    int maxSize;
    int count;
    std::vector<int> element;
    queue(int n=5) : element(n) {}
};

然后

queue q;

将在element 成员中构造一个具有5 个元素的queue 对象。不需要malloccallocfree

注意:

如果您将标签更改为C 而不是CC++,您就会明白为什么使用正确的标签很重要。您不能在C 中执行上述操作,它实际上与使用指针和使用malloc 的其他答案相同。

【讨论】:

    【解决方案2】:

    如果您希望element 的大小由用户输入选择,则必须动态分配数组。

    q.element = (int*) malloc(5*sizeof(int));
    memset(q.element, 0, 5*sizeof(int)); // will initialize array values to 0.
    

    【讨论】:

    • 不要转换malloc的结果!!也不要在 C++ 中使用malloc
    【解决方案3】:

    首先,element 不是一个数组;这是一个指针(指向int)。

    如果你想为它分配内存并对其进行零初始化,那么你可以使用calloc(),如下所示:

    struct queue q;
    
    q.element = calloc(5, sizeof(int)); // Allocate memory for 5 int's.
    

    你可以像这样使用它,例如:

    for (size_t i = 0; i < 5; i++)
       q.element[i] = i+1;
    

    使用后记得free()它:

    free(q.element);
    

    【讨论】:

      【解决方案4】:

      在您的情况下,您需要运行时内存分配功能,因此您可以使用 malloccalloc 函数在 C 中进行运行时内存分配。对于 C++,您可以使用 new

      对于 C 语言

      struct queue q;
      q.element = (int *)calloc(5,sizeof(int));
      

      这里 Calloc 返回一个指向已分配内存的指针。内存设置为零。

      对于 C++ 语言

      struct queue q;
      q.element = new int[5]();
      

      这里 () 用于对元素进行值初始化,并将值设置为 0。

      【讨论】:

      • 谢谢!我如何使用 Here()?
      • @JamesClark "Here()" 不是函数。帖子说括号是用来初始化为零的。
      • 就像我在声明中使用的那样。它只将数组元素值初始化为 0 。
      猜你喜欢
      • 2015-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-01
      • 2014-12-09
      • 2023-03-16
      • 2015-06-22
      • 1970-01-01
      相关资源
      最近更新 更多