C语言程序设计之创建动态二维数组问题的解决方案

C语言动态创建一维数组只需使用malloc或者calloc就可以,但是动态创建二维数组就复杂得多。那么,要怎样才能动态创建二维数组呢?

一、创建非连续空间的动态二维数组
二维数组可以看作是由许多行组成的,每一行都是一个一维数组。首先创建一个一维的指针数组,然后为该指针数组中的每个指针再创建一个一维数组,这样就动态创建一个二维数组了。。实现代码如下:

#include <stdio.h>  
#include <stdlib.h>  

#define ROWS 20		/* 二维数组行数 */
#define COLS 10		/* 二维数组列数 */

int main(void)
{
	int **p;
	int i, j;
	
	/* 开辟二维数组空间 */
	p = malloc(ROWS * sizeof(int *));
	for(i = 0; i < ROWS; i++)
	{
		p[i] = malloc(COLS * sizeof(int));
	}
	
	/* 初始化二维数组 */
	for(i = 0; i < ROWS; i++)
	{
		for(j = 0; j < COLS; j++)
		{
			p[i][j] = COLS * i + j + 100;
		}
	}
	
	/* 打印二维数组 */
	for(i = 0; i < ROWS; i++)
	{
		for(j = 0; j < COLS; j++)
		{
			printf("%d\t", p[i][j]);
		}
		printf("\n");
	}
	
	/* 释放二维数组空间 */
	for (i = 0; i < m; i++)
	{
		free(p[i]);
	}
	free(p);
    
	return 0;
}

二、创建连续空间的动态二维数组
动态申请固定大小的二维数组,一次性动态创建。实现代码如下:

#include <stdio.h>  
#include <stdlib.h>  

#define ROWS 20		/* 二维数组行数 */
#define COLS 10		/* 二维数组列数 */

int main(void)
{
	int (*p)[COLS];
	int i, j;
	
	/* 开辟二维数组空间 */
	p = malloc(ROWS * COLS * sizeof(int));
	
	/* 初始化二维数组 */
	for (i = 0; i < ROWS; i++)
	{
		for (j = 0; j < COLS; j++)
		{
			p[i][j] = COLS * i + j + 100;
		}
	}
	
	/* 打印二维数组 */
	for (i = 0; i < ROWS; i++)
	{
		for (j = 0; j < COLS; j++)
		{
			printf("%d\t", p[i][j]);
		}
		printf("\n");
	}
	
	/* 释放二维数组空间 */
	free(p);
	
	return 0;
}

Leave a Reply

Your email address will not be published. Required fields are marked *