C语言使用malloc函数模拟开辟二维数组(带分析)

系列文章目录

🌟 个人主页古德猫宁-

🌈 信念如阳光,照亮前行的每一步


文章目录

  • 系列文章目录
    • [🌈 *信念如阳光,照亮前行的每一步*](#🌈 信念如阳光,照亮前行的每一步)

当我们使用malloc函数来模拟创建一个二维数组时,我们需要理解二维数组在内存中是如何存储的。在C语言中,二维数组实际上是一维数组的数组。也就是说,一个二维数组可以被看作是一个包含多个一维数组的数组
考虑一个row行、cols列的二维整数数组。在内存中,它被表示为一系列相邻的整数存储单元。对于一个int**类型的指针数组,首先我们需要分配内存以存储行指针,然后为每一行分配内存以存储列的元素。

c 复制代码
#include<stdio.h>
#include<stdlib.h>
int main()
{
	int row = 3;
	int cols = 4;//确定要申请多大的二维数组
	//申请一个存储指针的数组,该数组的每一个元素都是指向整数的指针,二级指针
	int** arr = (int**)malloc(row * sizeof(int*));
	
	//这里需要判断一下分配是否成功
	if (arr == NULL)
	{
		perror("malloc");
		return 1;
	}
	
	//使用malloc为每行的每一列分配内存
	int i;
	int j;
	for (i = 0;i < row;i++)
	{
		arr[i] = (int*)malloc(cols * sizeof(int));
	}
	
	//判断
	if (arr[i] == NULL)
	{
		perror("malloc");
		return 1;
	}
	
	//访问赋值
	for (i = 0;i < row;i++)
	{
		for (j = 0;j < cols;j++)
		{
			arr[i][j] = i * cols;//这里谁便赋的值
		}
	}
	
	//打印
	for (i = 0;i < row;i++)
	{
		for (j = 0;j < cols;j++)
		{
			printf("%d", arr[i][j]);
		}
	}
	//首先释放每一行的内存,然后释放行指针数组的内存
	for (i = 0;i < row;i++)
	{
		free(arr[i]);
	}
	free(arr);
	return 0;
}

注意:这个方法只是模拟了二维数组的行为,实际上它在内存中是一维数组

相关推荐
geats人山人海15 分钟前
数据结构第六章c语言 树的存储下二叉树的概念和存储
c语言·数据结构·算法
小弥儿40 分钟前
GitHub今日热榜 | 2026-08-01:硬件安全工具与AI教育并行
人工智能·学习·开源·github
秋雨梧桐叶落莳1 小时前
计算器仿写总结
学习·macos·ios·objective-c·cocoa
影视飓风TIM1 小时前
Linux下C语言缓冲区原理 + Git版本控制
linux·c语言·git
卡梅德生物科技小能手1 小时前
卡梅德生物科普 TNFSF4(肿瘤坏死因子超家族成员 4)
经验分享·深度学习·生活
统计学小王子2 小时前
《数学少年-从正负号到几何原本》(第一章:“刻度之上,零为分界“)--1.2 电梯与账单里的相反数字
学习·初中数学·初中数学科普·数学科普
白狐_7982 小时前
408 数据结构算法题 01:线性表暴力求解保分指南
java·数据结构·算法
流云鹤2 小时前
03Java学习day(3)
java·学习
冻柠檬飞冰走茶2 小时前
PTA基础编程题目集 7-31 字符串循环左移(C语言实现)
c语言·开发语言·数据结构·算法
我命由我123453 小时前
棘轮效应极简理解
经验分享·学习·职场和发展·产品运营·求职招聘·职场发展·学习方法