1

私は次のように何かをしようとしています

float* A = fill_float(); //in other words A is full
float aIn2D[n/p][n] = &A; //the 2d array should be able to alter the 1d

上記を試しましたが、コンパイルできませんでした(サイズを可変長にできないことについて何か?)。も試した

float** aIn2D = &A

しかし、振り返ってみると、float ** は魔法のように [n/p][n] の行、列の分散が必要であることをどのように知るので、無意味でした (aIn2D の最初のアクセスでプログラムがクラッシュするため、そうは思わない)。

float aIn2D[n/p][n] = &A; のようなことをする方法を知っている人はいますか? で?

編集:もう1つ、[n / p] [n]のサイズがAが保持しているデータ量のサイズになることは確かです。

edit2: 非常に大きな側面は、両方の配列が同じメモリ位置を指していることです。aIn2D は、後続のメソッドで A に簡単にアクセスする方法にすぎません。

4

2 に答える 2

1

n_rowsとn_colsが変数であると仮定して、n_rows xn_cols2D配列として扱いたいfloatのn_rows*n_cols1D配列があるとします。

可変サイズの配列をサポートするC99を使用すると、実際に必要なことをほぼ実行できます。

float* A = fill_float();
float (*aIn2D)[n_cols] = (float (*)[n_cols])A;

それ以外の場合は、次のようなことを行うことができます。

float *A = fill_float();
float **aIn2D = malloc(n_rows*sizeof(float*));

{
  int i=0;
  for (; i!=n_rows; ++i) {
    aIn2D[i] = A + i*n_cols;
  }
}

// Use aIn2D[row][col]

free(aIn2D);
于 2012-11-29T06:55:22.620 に答える
0

2-D 配列を 1-D に変換する場合は、次のように試してください。

float a[MAX];
float dup_a[ROW][COL];
int i,j,k;
for(i = 0 ; i < MAX ; i++)
{
  j= i / ROW ;  // you can do it by i / COL also 
  k= i % ROW ; // you can do it by i % COL also 
  dup_a[j][k] = a[i];
}

または、これを試すことができます。

float* A = fill_float();
float (*aIn2D)[n] = &A; // create a pointer to an array 
于 2012-11-29T06:16:32.030 に答える