今天在写八皇后时遇到了一些小问题,下面整理一下。
二维数组初始化
用二阶指针来申请:
#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");
}
}
}
}
上两种传参方式都可以成功传参。