如何創建一個可變大小的二維數組,並傳遞該可變數組,並返回一個新的不同維數的二維數組?我一直在這個工作幾個小時,我找不到解決方案。我設法爲PGM圖像創建了一個像素值數組,但現在我試圖「旋轉」數組,但這變得非常複雜,因爲我的編譯器不會讓我聲明一個可變大小的對象。謝謝對那些回答的人非常感興趣。如何創建一個變量大小的數組,將變量2d數組傳遞給函數並返回另一個2d數組?
這是調用函數的語句。有人告訴我使用malloc,因爲你不能創建一個可變大小的數組。
char *SpunArray = malloc(image->x * image->y * sizeof(PGMPixel));
SpunArray = Rotate90Array(image->x, image->y, CreatedArray);
這是函數:
//char * Rotate90Array(int x, int y, char *array[x][y])
char * Rotate90Array(int x, int y, char *array)
{
printf("\nLine 179");
// These have to be swapped because the image is being rotated
char *RotatedArray = malloc(x * y * sizeof(char));
printf("\nLine 182");
int u = x - 1;
int v = y - 1;
int i = 0;
int j = 0;
printf("\nLine 187");
char *ptr;
printf("\nLine 189");
for (i = 0; i < x; i++)
{
printf("\nLine 192");
*ptr = RotatedArray[i];
printf("\nLine 194");
for (j = 0; j < y; j++)
{
printf("\nLine 197");
// *ptr = *(array[u-j][i]);
*(ptr+((j*x)+(u-i))) = *(array+((i*y)+j));
printf("\nLine 200");
ptr++;
printf("\nLine 202");
}
}
printf("\nLine 205");
return RotatedArray;
}
我使用MingGW GCC和Windows 8是否有幫助。
,如果你這樣做是爲了學習的目的,然後它的好,但如果它在的地方修改即可工作在陣列中會更好的選擇我認爲。 –
@GrijeshChauhan 這不需要這兩個數組具有相同的尺寸?由於新陣列是一個旋轉,它將是n * m,而原始是m * n。 – DavidRC
對不起,我注意到你的評論後,你是正確的,它很難使用相同的數組。 –