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;
}

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

相关推荐
代码游侠1 分钟前
学习笔记——线程控制 - 互斥与同步
linux·运维·笔记·学习·算法
爱吃泡芙的小白白9 分钟前
Agent学习——xiaomi MiMo V2 Flash大模型的API申请
学习·agent·xiaomi mimo
聆风吟º11 分钟前
【数据结构手札】顺序表实战指南(一):线性表定义 | 顺序表定义
数据结构·顺序表·线性表
四谎真好看16 分钟前
MySQL 学习笔记(进阶篇1)
笔记·学习·mysql·学习笔记
三品吉他手会点灯23 分钟前
STM32F103学习笔记-19-SysTick-系统定时器(第1节)-功能框图讲解和优先级配置
笔记·stm32·单片机·嵌入式硬件·学习
小易吾24 分钟前
VISIO导出高清PDF有效方法
笔记·pdf
لا معنى له25 分钟前
学习笔记:Transformer
人工智能·笔记·深度学习·学习·机器学习·transformer
JosieBook29 分钟前
【Vue】03 Vue技术——Vue.js 入门学习笔记:Hello World 案例详解
vue.js·笔记·学习
li星野29 分钟前
打工人日报#20251217
笔记
啊董dong38 分钟前
noi-2025年12月16号作业
数据结构·c++·算法·noi