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

您所在的位置:网站首页 c语言获取输入数组 【C语言】动态分配一个二维数组+图解

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

2023-06-16 15:43| 来源: 网络整理| 查看: 265

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

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

 需要注意:

 在同一行中的元素地址是连续的,而不同行中元素地址是不连续的。因为在malloc(int*)的时候他是在堆上随机分配的内存. 释放内存不能直接释放arr,这样会导致内存泄漏,因为二级指针arr里面存放的一级指针int* 也是malloc动态分配出来的,要记得先回收,最后在释放二级指针int**。 空间不能申请太大,堆上的内存是有限的。 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"); }

 

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3