【C语言】动态分配一个二维数组+图解

简介: 【C语言】动态分配一个二维数组+图解

相信有朋友在刷题或者某一些场合上要使用一个动态二维数组,C语言实现一个动态二维数组要自己分配内存。那如何操作呢?


首先我们申请一个动态的二级指针,让该二维数组在申请int*类型数组的内存空间 赋值给int**二级指针类型,在分别给int*类型的数组申请空间.指向int类型存放值.


dced4c27a64b43c0b2f629d88d791084.png


需要注意:

1. 在同一行中的元素地址是连续的,而不同行中元素地址是不连续的。因为在malloc(int*)的时候他是在堆上随机分配的内存.

2. 释放内存不能直接释放arr,这样会导致内存泄漏,因为二级指针arr里面存放的一级指针int* 也是malloc动态分配出来的,要记得先回收,最后在释放二级指针int**。

3.空间不能申请太大,堆上的内存是有限的。


int main()
{
  //申请几行几列
  int row = 0 ; //行
  int col = 0; //列
  scanf("%d %d", &row, &col);
  int** arr = (int**)malloc(sizeof(int*) * row); //申请一个动态二级指针
  int i = 0;
  for (i = 0; i < row; i++)
  {
    arr[i] = (int*)malloc(sizeof(int) * col); //申请一行有几个元素
  }
  //输入二维数组的值
  for (i = 0; i < row; i++)
  {
    int j = 0;
    for (j = 0; j < col; j++)
    {
      scanf("%d", &arr[i][j]);
    }
  }
  //打印二维数组
  for (i = 0; i < row; i++)
  {
    int j = 0;
    for (j = 0; j < col; j++)
    {
      printf("%d ", arr[i][j]);
    }
    printf("\n");
  }
  //同一行中元素地址是连续的,不同行中元素地址不一定是连续的。
  for (i = 0; i < row; i++)
  {
    int j = 0;
    for (j = 0; j < col; j++)
    {
      printf("%p ", &arr[i][j]);
    }
    printf("\n");
  }
  //释放动态内存分配的二维数组
  for (i = 0; i < row; i++)
  {
    free(arr[i]);
  }
  free(arr);
  system("pause");
}

9d8193e8eee54d9dacaea4c3b5b59292.png



目录
相关文章
|
8月前
|
C语言
C语言期末习题之求二维数组中的最大值
C语言期末习题之求二维数组中的最大值
90 0
|
8月前
|
C语言
【C语言】利用数组处理批量数据(一维数组和二维数组)
【C语言】利用数组处理批量数据(一维数组和二维数组)
|
8月前
|
存储 数据处理 C语言
C语言二维数组
C语言二维数组
78 0
|
2月前
|
存储 C语言
C语言如何使用结构体和指针来操作动态分配的内存
在C语言中,通过定义结构体并使用指向该结构体的指针,可以对动态分配的内存进行操作。首先利用 `malloc` 或 `calloc` 分配内存,然后通过指针访问和修改结构体成员,最后用 `free` 释放内存,实现资源的有效管理。
215 13
C4.
|
8月前
|
存储 C语言
C语言怎样定义和引用二维数组
C语言怎样定义和引用二维数组
C4.
106 0
|
3月前
|
存储 编译器 C语言
【C语言】数组(一维、二维数组的简单介绍)
【C语言】数组(一维、二维数组的简单介绍)
120 1
|
8月前
|
C语言
C语言期末习题之二维数组转置
C语言期末习题之二维数组转置
66 0
|
4月前
|
存储 C语言 C++
数据结构基础详解(C语言) 顺序表:顺序表静态分配和动态分配增删改查基本操作的基本介绍及c语言代码实现
本文介绍了顺序表的定义及其在C/C++中的实现方法。顺序表通过连续存储空间实现线性表,使逻辑上相邻的元素在物理位置上也相邻。文章详细描述了静态分配与动态分配两种方式下的顺序表定义、初始化、插入、删除、查找等基本操作,并提供了具体代码示例。静态分配方式下顺序表的长度固定,而动态分配则可根据需求调整大小。此外,还总结了顺序表的优点,如随机访问效率高、存储密度大,以及缺点,如扩展不便和插入删除操作成本高等特点。
247 5
|
4月前
|
存储 人工智能 C语言
C语言程序设计核心详解 第八章 指针超详细讲解_指针变量_二维数组指针_指向字符串指针
本文详细讲解了C语言中的指针,包括指针变量的定义与引用、指向数组及字符串的指针变量等。首先介绍了指针变量的基本概念和定义格式,随后通过多个示例展示了如何使用指针变量来操作普通变量、数组和字符串。文章还深入探讨了指向函数的指针变量以及指针数组的概念,并解释了空指针的意义和使用场景。通过丰富的代码示例和图形化展示,帮助读者更好地理解和掌握C语言中的指针知识。
177 4
|
4月前
|
存储 人工智能 C语言
C语言程序设计核心详解 第六章 数组_一维数组_二维数组_字符数组详解
本章介绍了C语言中的数组概念及应用。数组是一种存储同一类型数据的线性结构,通过下标访问元素。一维数组定义需指定长度,如`int a[10]`,并遵循命名规则。数组元素初始化可使用 `{}`,多余初值补0,少则随机。二维数组扩展了维度,定义形式为`int a[3][4]`,按行优先顺序存储。字符数组用于存储字符串,初始化时需添加结束符`\0`。此外,介绍了字符串处理函数,如`strcat()`、`strcpy()`、`strcmp()` 和 `strlen()`,用于拼接、复制、比较和计算字符串长度。
121 4

热门文章

最新文章