C语言程序动态创建二维数组

在本文中,你将学会使用C语言通过多种方法实现二维数组;其中包含为二维数组指针动态的分配内存、释放内存;

方法1

该方法实现二维数组比较简单;内存分配到栈段,内存的分配和释放由编译器完成;缺点是栈段的容量有限,不能使用此方法创建大的二维数组,且数组的大小需要在程序编译时就定义好;

#include <stdio.h>

int main() {

	int map[10][5]; //10*5的二维数组
	int value = 0;

	for(int row = 0; row < 10; row++) {
		for(int col = 0; col < 5; col++) {
			map[row][col] = value; //赋值
			printf(" %d", map[row][col]);//访问值
			value++;
		}
		printf("\n");
	}
}

程序1运行效果

 0 1 2 3 4
 5 6 7 8 9
 10 11 12 13 14
 15 16 17 18 19
 20 21 22 23 24
 25 26 27 28 29
 30 31 32 33 34
 35 36 37 38 39
 40 41 42 43 44
 45 46 47 48 49

方法2

通过定义一个二维数组指针,动态的申请内存;该方法需要你自行申请内存和释放内存,因为使用的是堆段的内存,所以能存储大量数据,具体取决于操作系统;且数组大小可在申请内存前定义;

该方法用到malloc()free()这两个函数,需要使用"stdlib.h"头文件;

#include <stdlib.h>
int main() {

	int** map;
	
	int height = 1024;
	int length = 768;
	//分配内存
	map = (int**)malloc(sizeof(int*) * height);
	for (int i = 0; i < height; i++) {
		map[i] = (int*)malloc(sizeof(int) * length);
	}
	if (map == NULL) {
		//内存申请失败
		return 1;
	}
	//将数组用0填充
	for (int row = 0; row < height; row++) {
		for (int  col= 0; col < length; col++) {
			map[row][col] = 0;
		}
	}

	//释放内存
	for (int i = 0; i < height; i++) {
		free(map[i]);
	}
	free(map);
}

原创内容,如需转载,请注明出处;

本文地址: https://www.perfcode.com/p/c-program-2d-array.html

分类: 计算机技术
推荐阅读:
WordPress如何禁用Emoji表情 由于WordPress自带的Emoji表情服务需要连接到国外服务器,国内用户访问比较慢、不稳定,影响体验,且大部分用户根本用不到;这个服务应该禁用。
PySide6控件详细教程 在本教程中,我们将介绍 PySide6 中最常用的控件,包括标签、按钮、文本框、下拉框、列表框、复选框、单选框、滑块、进度条、图像控件等。
Python delattr()函数 在Python中,delattr()函数用于删除对象的属性。它接受两个参数:第一个参数是要删除属性的对象,第二个参数是要删除的属性的名称。如果对象中不存在指定的属性,将会抛出AttributeError异常。
Python实现冒泡排序(Bubble Sort) 冒泡排序(Bubble Sort)是一种比较简单的排序算法。它重复遍历要排序的元素,依次比较两个相邻的元素,如果顺序错误,则将他们交换;直到所有元素顺序正确。
Rust好用的GUI库 Rust生态系统中有许多GUI库可供选择,以下是一些受欢迎的Rust GUI库:
Nginx禁止使用IP直接访问 在有些场景中,我们希望访问者只能通过域名访问网站,不允许访问者直接通过IP进行访问,这一简单功能可通过配置Nginx实现。