0

不確定なサイズの配列に変換したいフロートへのポインターを持つ構造体があります。プログラムの最初に、これらの構造体のいくつかを宣言し、次のように異なるサイズの配列に変換したいと考えています。

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
      };

残念ながら、これは機能しません。各値を個別に追加する以外に、配列に値を取得する提案はありますか (a[0] = 6; など)?

4

3 に答える 3

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 でこのような初期化を実行する簡単な方法はありません。1 つのオプションは、一時的な固定サイズの配列から初期化することです。

float farray_[5] = {1.0f, 2.0f, 3.0f, 4.0f, 5.0f};
arr_ x{ std::vector<float>(farray_, farray_+5)};
于 2013-06-26T07:33:33.237 に答える
1

を初期化しarrayてから、動的メモリにstackコピー/することができます。memcpyただしvector、提案どおりに使用することをお勧めします。

于 2013-06-26T07:34:32.313 に答える
0

xa はポインターであり、 xa = xx を変更すると、アドレスが変更されます

このコードを試してください:

xa = 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 ) ;

于 2013-06-26T07:35:29.127 に答える