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