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; 在 c?

编辑:还有一件事,我肯定知道 [n/p][n] 的大小将是 A 持有的数据量的大小。

edit2:一个很大的方面是两个数组都指向同一个内存位置,aIn2D 只是我在随后的方法中轻松访问 A 的一种方式。

4

2 回答 2

1

假设 n_rows 和 n_cols 是变量,假设您有一个 n_rows*n_cols 一维浮点数组,您希望将其视为 n_rows x n_cols 二维数组。

使用支持可变大小数组的 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

如果您想将二维数组转换为一维数组,那么您应该这样尝试:

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 回答