我正在尝试按照以下方式执行操作
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的一种方式。
答案 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