“壓扁陣列”技巧(flattening the array)
阿新 • • 發佈:2018-11-10
如果需要給函式傳遞一個二維陣列,又不想在函式原型中給出第二維的長度,則可以考慮把陣列直接傳進去,形參用void *
接收。在函式內可以把形參指標轉換成其他型別。
下面給出一個例子,函式func接收一個二維陣列,在函式內轉換成一維陣列進行逆序處理。
#include <stdio.h>
#include <malloc.h>
#define ROW 4
#define COL 4
void func(void *a)
{
int *arr = (int *)a;
int temp;
for (int i = 0; i < ROW * COL / 2; i++)
{
temp = arr[i];
arr[i] = arr[ROW * COL - 1 - i];
arr[ROW * COL - 1 - i] = temp;
}
}
int main()
{
int arr[ROW][COL] =
{
{ 1, 2, 3, 4 },
{ 5, 6, 7, 8 },
{ 9, 10, 11, 12 },
{ 13, 14, 15, 16 }
};
func(arr);
for (int i = 0; i < ROW; i++)
{
for (int j = 0; j < COL; j++)
{
printf("%4d", arr[i][j]);
}
putchar('\n');
}
}