二維陣列動態申請與傳參
阿新 • • 發佈:2019-01-30
今天在寫八皇后時遇到了一些小問題,下面整理一下。
二維陣列初始化
用二階指標來申請:
#include <stdio.h> #include <malloc.h> /* 這裡只做申請 */ void makeDoubleArray(int row, int col) { int **array; int i, j; array = (int**)malloc(sizeof(int*) * row); for(i = 0; i < row; i++) { array[i] = (int *)malloc(sizeof(int*) * col); for(j = 0; j < col; j++) { printf("%p ", &array[i][j]); if(j == col - 1) { printf("\n"); } } } for(i = 0; i < row; i++) { free(array[i]); } free(array); } void main(void) { makeDoubleArray(4, 8); }
用二維陣列指標申請
#include <stdio.h> void makeArray(int row) { int i; int j; int (*array)[8] = (int (*)[8])malloc(sizeof(int) * row * 8); for(i = 0; i < row; i++) { for(j = 0; j < 8; j++) { printf("%d ", array[i][j]); //輸出自然都是垃圾資料 if(j == 7) { printf("\n"); } } } } void main(main) { makeArray(8); }
用二維指標方法的缺陷是必須事先知道列數,限制較大。
也可用一維陣列申請x*y個空間的方法模擬申請二維陣列。
二維陣列傳參
在遍歷二維陣列的過程中需要將二維陣列傳參,下面是錯誤傳參方式示範:
void showArray(int **array) {
int i;
int j;
for(i = 0; i < MAX_COL; i++) {
for(j = 0; j < MAX_COL; j++) {
printf("%d ", array[i][j]);
if(j == MAX_COL - 1) {
printf("\n");
}
}
}
}
提示錯誤為引數型別不匹配,一個是int**,一個是int(*)[8]。
void showArray(int (*array)[8]) { //可執行
int i;
int j;
for(i = 0; i < MAX_COL; i++) {
for(j = 0; j < MAX_COL; j++) {
printf("%d ", array[i][j]);
if(j == MAX_COL - 1) {
printf("\n");
}
}
}
}
void showArray(int array[][8]) {
int i;
int j;
for(i = 0; i < MAX_COL; i++) {
for(j = 0; j < MAX_COL; j++) {
printf("%d ", array[i][j]);
if(j == MAX_COL - 1) {
printf("\n");
}
}
}
}
上兩種傳參方式都可以成功傳參。