我有一个带浮点指针的结构,我想把它变成一个不确定大小的数组。在我的程序开始时,我想声明一些这些结构并将它们转换为不同大小的数组,如下所示:
struct _arr {
float * a;
}
...
_arr x;
x.a = (float *)malloc(sizeof(float)*31);
x.a = { 6,
1, 1, 1, 0 , 0 ,
1, 0, 1, 0 , 0.0625,
1, 1, 0, 0.0625, 0 ,
1, 0, 1, 0 , 0.0625,
1, 0, 0, 0.0625, 0.0625,
1, 1, 0, 0.0625, 0
};
不幸的是,这不起作用,除了单独添加每个值(例如[0] = 6;)之外,是否有人有任何建议将值放入数组中?
答案 0 :(得分:3)
这可以通过存储std::vector<float>
:
#include <vector>
struct arr_ {
std::vector<float> a;
};
在C ++ 11中,初始化很简单:
arr_ x{ {1.0f, 2.0f, 3.0f, 4.0f, 5.0f} };
不幸的是,在C ++ 03中执行这样的初始化没有简单的方法。一种选择是从临时固定大小的数组初始化:
float farray_[5] = {1.0f, 2.0f, 3.0f, 4.0f, 5.0f};
arr_ x{ std::vector<float>(farray_, farray_+5)};
答案 1 :(得分:1)
您可以在array
上初始化stack
,然后将/ memcpy
复制到动态内存中。但建议使用vector
是更好的选择。
答案 2 :(得分:0)
x.a是一个指针,当你改变x.a = xx时你改变了地址
试试这段代码:
x.a = new float(6, 1,1,1,0,0, 1,0,1,0,0.0625, 1,1,0,0.0625,0, 1,0,1,0,0.0625, 1,0,0,0.0625,0.0625, 1,1,0,0.0625,0 );