私は変数を持っています:
unsigned int* data = (unsigned int*)malloc(height * width)
すべての配列値に同じ int を設定したい。memset はバイトで動作するため使用できません。
どうやってやるの?
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);
配列メモリの次元が不変であると仮定します。
#include <vector>
unsigned int literal(500);
std::vector<unsigned int> vec(height * width, literal);
vector<unsigned int>::pointer data = &vec[0];
Boost.MultiArrayは、ここでスペース内のポイントにインデックスを付けているように見えるため、興味深いかもしれません (1D 配列の次元は高さと幅から得られます)。
配列が必要だと確信している場合は、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 の言うようにベクトルを使用してください。
for ループを使用する必要があると思います。
int i;
for (i = 0; i < height * width; i++)
data[i] = value;
これに 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;