使用函数在函数中声明数组值
Use function to declare array values in a function
首先,如果我混淆了一些术语,如声明/定义等,我很抱歉。我目前正在尝试熟悉它们。我的问题是:我必须在代码中创建一个大矩阵。我想将其移动到文件末尾的单独函数中,以使事情更加简单。有什么简单的方法可以做到这一点吗?我不能使用"vector",因为我必须在稍后将矩阵交给不支持"vector"的函数(不要问,这个另一个函数不是我写的(。
我目前使用此代码(因为它正在工作(,它在 main 函数中声明矩阵,以便它不会超出范围。我希望可以直接在函数中分配矩阵的值,但我无法使其工作。
void make_matrix(float (&matrix_float)[255][4]);
int main()
{
// ...
float matrix[255][4]{ 0 };
make_matrix(matrix);
// ...
}
void make_matrix(float (&matrix_float)[255][4])
{
float preparation[255][4]{ { 0, 0, 0, 0 },
{ 0.639999985694885, 0, 0.800000011920929, 1 },
{ 0, 1, 0, 1 },
// ........
};
for (int i = 0; i < 255; i++)
for (int j = 0; j < 4; j++)
{
{
matrix_float[i][j] = preparation[i][j];
}
}
}
有没有更优雅的方法?
问题是:普通数组不可分配。
您可以在定义点初始化数组。但是您以后不能为已经存在的数组分配不同的数组。
然后,只能进行元素明智的分配。就像您在子函数中所做的那样。您至少应该在准备中添加 constexpr。但这不会真正有所作为。将二维数组作为参考的一大优势!
你要求一个更优雅的解决方案。Jarod42已经给出了提示。将矩阵包装在 POD(普通旧结构(中,这是一个结构。然后C++将创建各种特殊函数,例如为您创建辅助运算符。
将新的初始值设定项列表分配给 POD 将起作用。而不是矩阵,你将写 "pod.matrix" 。就是这样
请参阅以下示例:
#include <iostream>
constexpr size_t Rows = 3;
constexpr size_t Cols = 4;
struct POD
{
double matrix[Rows][Cols];
};
void makePOD(POD& pod);
int main()
{
// ...
POD pod{};
makePOD(pod);
std::cout << pod.matrix[1][0];
// ...
}
void makePOD(POD& pod)
{
pod = { { { 0.0, 0.0, 0.0, 0.0 },
{ 0.639999985694885, 0.0, 0.800000011920929, 1.0 },
{ 0.0, 1.0, 0.0, 1.0 }
}
};
}
希望这有所帮助。 。 。
相关文章:
- 第 i 个元素返回 i 的函数数组
- 使用嵌套函数数组是个好主意吗?
- 正确实现类函数数组
- 试图引用已删除函数数组的相等运算符
- 如何在静态函数中使用成员函数数组
- 无法创建函数数组
- 构造函数数组
- 使用开关或定义函数数组 - 更快
- 编写一个函数,该函数将覆盖主函数数组中的值
- 可以像'funs[1]();'一样调用的函数数组
- std::AVX内部函数数组
- 如果数组大小未知,如何将函数数组作为参数传递
- 从函数数组中获取值
- 使用元编程在编译时初始化函数数组
- 将C函数数组转换为C++函数指针数组
- 复制构造函数 [数组] C++
- 添加函数数组并随机选择其中一个
- 指针到私有成员函数数组
- 可以单独声明函数数组的元素
- (c++)将main中的随机值保存到函数数组中