0

私は変数を持っています:

unsigned int* data = (unsigned int*)malloc(height * width)

すべての配列値に同じ int を設定したい。memset はバイトで動作するため使用できません。

どうやってやるの?

4

5 に答える 5

15

C++ の使用:

std::vector<unsigned int> data(height * width, value);

ポインターを必要とするレガシー C 関数にデータを渡す必要がある場合は、&data[0]orを使用&data.front()して、明確に定義された方法で連続したデータへのポインターを取得できます。

全体を通して絶対にポインターを使用することを主張する場合 (ただし、これを行う技術的な理由はなく、コード レビューでは受け入れません!)、 を使用std::fillして範囲を埋めることができます。

unsigned int* data = new int[height * width];
std::fill(data, data + height * width, value);
于 2011-07-07T15:50:24.793 に答える
2

配列メモリの次元が不変であると仮定します。

#include <vector>

unsigned int literal(500);
std::vector<unsigned int> vec(height * width, literal);
vector<unsigned int>::pointer data = &vec[0];

Boost.MultiArrayは、ここでスペース内のポイントにインデックスを付けているように見えるため、興味深いかもしれません (1D 配列の次元は高さと幅から得られます)。

于 2011-07-07T15:54:18.053 に答える
1

配列が必要だと確信している場合は、C++ の方法で行い、「malloc」、「for」、または「free candy」と言う人の言うことを聞かないでください。

#include <algorithm>

const size_t arsize = height * width;
unsigned int * data = new unsigned int[arsize];
std::fill(data, data + arsize, value);

/* dum-dee-dum */

delete[] data; // all good now (hope we didn't throw an exception before here!)

配列が必要かどうかわからない場合は、Konrad の言うようにベクトルを使用してください。

于 2011-07-07T15:55:36.313 に答える
0

for ループを使用する必要があると思います。

int i;
for (i = 0; i < height * width; i++)
  data[i] = value;
于 2011-07-07T15:51:00.707 に答える
0

これに C と C++ の両方のタグを付けました。それらは同じ言語ではありません。

C では、おそらく次のようなコード フラグメントが必要です。

// WARNING: UNTESTED
unsigned int* data = malloc(height * width * sizeof (unisgned int));
int i;
for(i = 0; i < height*width; i++)
    data[i] = 1941;
于 2011-07-07T16:03:07.047 に答える