将函数中的数组值传递回结构

时间:2017-11-03 15:05:03

标签: c++ arrays function struct

我目前正在开发一个程序,它需要一个函数来计算数组值,然后将这些值存储在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] << " ";
}

1 个答案:

答案 0 :(得分:0)

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

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

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