簡體   English   中英

如何使可變大小的2d數組指向(並表示)c中1d數組的起始地址?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM