1. 程式人生 > >“壓扁陣列”技巧(flattening the array)

“壓扁陣列”技巧(flattening the array)

如果需要給函式傳遞一個二維陣列,又不想在函式原型中給出第二維的長度,則可以考慮把陣列直接傳進去,形參用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'); } }