二维数组动态申请与传参

今天在写八皇后时遇到了一些小问题,下面整理一下。

二维数组初始化

用二阶指针来申请:

#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");
			}
		}
	}
}
上两种传参方式都可以成功传参。


发布了29 篇原创文章 · 获赞 0 · 访问量 3312

猜你喜欢

转载自blog.csdn.net/smithlaod/article/details/80547990