C语言使用malloc函数模拟开辟二维数组(带分析)
2023-12-13 07:19:10
系列文章目录
🌟 个人主页
:古德猫宁-
🌈 信念如阳光,照亮前行的每一步
当我们使用malloc函数来模拟创建一个二维数组时,我们需要理解二维数组在内存中是如何存储的。在C语言中,二维数组实际上是一维数组的数组。也就是说,一个二维数组可以被看作是一个包含多个一维数组的数组
考虑一个row行、cols列的二维整数数组。在内存中,它被表示为一系列相邻的整数存储单元。对于一个int**类型的指针数组,首先我们需要分配内存以存储行指针,然后为每一行分配内存以存储列的元素。
#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;
}
注意:这个方法只是模拟了二维数组的行为,实际上它在内存中是一维数组
文章来源:https://blog.csdn.net/zsd2829568515/article/details/134937523
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!