如何使可变大小的2d数组指向(并表示)c中1d数组的起始地址?

时间:2012-11-29 06:04:41

标签: c multidimensional-array

我正在尝试按照以下方式执行操作

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

但回想起来这是荒谬的,因为浮动**如何神奇地知道我想要一行,[n / p] [n]的列分布(我不认为它确实如此,因为程序在第一次崩溃时访问aIn2D)。

所以有人知道如何做浮动aIn2D [n / p] [n] =& A;在c?

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

edit2:一个非常重要的方面是两个数组都指向相同的内存位置,aIn2D只是我在后续方法中轻松访问A的一种方式。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分: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