一維轉二維代碼示例:數組
#include <stdio.h> #include <stdlib.h> #define ROW 3 #define COL 2 int main(int argc, char *argv[]) { int arr1D[] = {1,2,3,4,5,6}; int arr2D[ROW][COL]; int i,j; //一維維整型數組轉換爲二維整型數組 for(i=0;i<ROW;i++) { for(j=0;j<2;j++) { arr2D[i][j]=arr1D[i*COL+j]; } } //二維整型數組打印顯示 for(i=0;i<ROW;i++) { for(j=0;j<COL;j++) { printf("%d ", arr2D[i][j]); } printf("\n"); } system("pause"); return 0; }
這裏提供一種將二維轉換爲一維的思路:spa
轉換成二維數組之後怎麼才能用更簡單的方式a[m][n]去表達呢?若是用那個表達式的話就太麻煩了,我要進行大量的操做,容易出問題。
答:這個能夠用宏來實現。舉個例子說,好比你定義一個大小爲100的一維數組A,而後你須要別人輸入m=8,n=9(不少狀況別人不可能按照你的意圖來恰好用m和n整除一維數組的下表最大值,也就是說那個一維數組只須要保證足夠大就能夠了),而後你但願獲得一個8*9的二維矩陣B[8][9]。
引用這個二維矩陣的時候,直接使用B[3][4]來引用第三行第四列的元素?
用宏定義(如下宏定義並無上機調試,只是提供思路)
#define B[(x)][(y)] A[((x*m)+(y%n)]
解釋一下:x*m,加入你須要B[3][4],那麼就是對應一維數組第3*8+4%9=28個元素。調試