[英]How can I make a variable size 2d array point to (and represent) the starting address of a 1d array in c?
我正在嘗試做以下事情
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的一種方式。
假設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);
如果要將二維數組轉換為一維數組,則應嘗試如下操作:
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.