将数组值从函数传递回结构

Passing array values from a function back into a struct

本文关键字:结构 函数 数组      更新时间:2023-10-16

我目前正在开发一个程序,该程序需要一个函数来计算数组值,然后将这些值存储在arr1[]中,其大小未知,并在函数内计算。 然后,它将整个数组以及数组的大小传回主函数。 使用结构,我返回了大小,但由于某种原因我无法返回数组。 有人可以指导我做错了正确的方向吗?

这是我的结构:

struct Arr
{
int size_1;
int arr_1[];
};

这是我返回数组的函数的一部分,其中arr1[]是我需要返回的数组:

Arr smallElement(int arr[], int size)
{
Arr tempArr;
for (int count = 0; count < newSize; count++)
{
tempArr.arr_1[count] = arr1[count];
}
return tempArr;
}

这是我在 main 函数中使用的函数来调用函数来打印数组,但它每次只打印 3 个随机数:

Arr a;
a = smallElement(array, n);
cout << "The array is: ";
for (int count = 0; count < a.size_1; count++)
{
cout << a.arr_1[count] << " ";
}

struct内,int arr_1[]没有定义一个实际的数组。它实际上只是一个称为灵活数组成员的占位符。在 C 语言中,这是通过为struct的完全定义部分分配内存以及为数组分配额外空间来使用的 — 在使用malloc或其他内存分配时,您必须手动添加空间。在标准C++中,不应使用它。(它不是标准C++的一部分。它是一些来自 C 的编译器采用的扩展,它是标准的。

当你声明tempArr时,它只创建了struct的完全定义的部分。当您将值分配给tempArr.arr_1[count]时,那里没有分配的数组,因此行为是未定义的。返回tempArr时,将返回结构的副本,但同样,仅返回已定义部分的副本。

如果调用方知道数组的大小,您可能希望他们将其传递给函数,也许是通过new分配数组或使用std::vector并通过引用传递向量。如果调用方不知道大小,则可能需要让函数分配数组并返回指向它的指针(在这种情况下,调用方负责稍后删除它),或者您可能希望将空(或以其他方式可供重用)std::vector传递给函数,最好是通过引用。在函数内部,它可以向向量添加更多元素,std::vector将为您管理内存分配。