二维数组的动态内存申请,采用子函数的方式 为二级指针申请内存,和释放内存
原理:二级指针,行指针+列指针
照着葫芦画瓢就行。
方法一:用c语言malloc实现
#include<cstdio>
#include<iostream>
#include<cstring>
#include<string>
//二维数组的动态内存申请,采用子函数的方式 为二级指针申请内存,和释放内存
int** creatArray2D(int row, int col)
{//int *p=(int*)malloc(sizeof(int)*4)int** p1 = (int**)malloc(sizeof(int*) * row);//申请了三个一级指针(也就是行指针)if (p1 == NULL){return NULL;}for (int i = 0; i <col; i++){p1[i] = (int*)malloc(sizeof(int) *col);}return p1;
}
int main()
{int** array = creatArray2D(3, 4);for (int i = 0; i < 3; i++){for (int j = 0; j < 3; j++){array[i][j] = i + j;}}for (int i = 0; i < 3; i++){for (int j = 0; j < 4; j++){printf("%d\t",array[i][j]);}printf("\n");}free(array);return 0;
}
方法二:用数组指针实现
int main()
{//数组指针,指向int【4】的一个指针int(*p)[4] = (int(*) [4])malloc(sizeof(int[4]) * 3);//Malloc前面的是强制类型转化->三行四列//一步到位if (p == NULL)return NULL;for (int i = 0; i < 3; i++){for (int j = 0; j < 4; j++){printf("%d\t", p[i][j] = i + j);}printf("\n");}return 0;
}
这样写虽然可以一步到位,但是优缺点:列数是一开始就固定好了
方法三:用C++实现(new和delete)
#include<iostream>
#include<string>
using namespace std;
void creatArray2D(int**&p,int row,int col)
{p = new int* [row];for (int i = 0; i < row; i++){p[i] = new int[col];}
}
void testArr(int**& p, int row, int col)
{for (int i = 0; i < row; i++){for (int j = 0; j < col; j++){p[i][j] = i + j;cout << p[i][j]<<"\t";}cout << endl;}
}
void freeArr(int**& p, int row, int col)
{for (int i = 0; i < row; i++){delete[]p[i];p[i] = nullptr;}delete[]p;p = nullptr;
}
int main()
{int** p = nullptr;creatArray2D(p, 3, 3);testArr(p, 3, 3);freeArr(p, 3, 3);return 0;
}
//new可以理解为类型降一级。
当然不用&,那么可以用c语言传统的传地址。(原理同)
void creatArray(int*** p, int row, int col)
{*p = new int* [row];for (int i = 0; i < row; i++){(*p)[i] = new int[col];//注意此处不能写成 *p[i]=new int[col];优先级问题//此处相当于了对p[i]解引用,我们原本的意图是先化p为二级指针,再[]调成行列指针}
}
注意最后一行代码的优先级问题。
二维数组的动态内存申请,采用子函数的方式 为二级指针申请内存,和释放内存相关推荐
- 二维数组及其动态内存分配
一.二维数组的基本概念 1.1 二维数组的内存映像 从内存角度看,二维数组和一维数组一样,在内存中都是连续分布的多个内存单元,并没有本质差别,只是内存的管理方式不一样,如下图所示 一维数组int a[ ...
- java二维数组添加元素_Java二维数组与动态数组ArrayList类详解
java二维数组 java 语言中提供的数组是用来存储固定大小的同类型元素. 1.二维数组初始化和声明 数组变量的声明,和创建数组可以用一条语句完成,如下所示: int a[][] = new int ...
- arraylist 初始化_Java二维数组和动态数组ArrayList 类
Java二维数组 Java 语言中提供的数组是用来存储固定大小的同类型元素. 1.二维数组初始化和声明 数组变量的声明,和创建数组可以用一条语句完成,如下所示: int a[][] = new int ...
- 动态二维数组外圈元素值的和_C语言 | 用指向元素的指针变量输出二维数组元素的值...
例33:有一个3*4的二维数组,要求用C语言实现指向元素的指针变量输出二维数组个元素的值. 解题思路:二维数组的元素时整型的,它相当于整型变量,可以用int*型指针变量指向它.二维数组的元素在内存中是 ...
- 16 React【无人点餐无人收银系统案例】路由配置、菜品列表制作、请求数据渲染二维数组、动态路由传值 【基础项目】
一.页面 二.react-router4.x 路由配置 App.js import React from "react";import { BrowserRouter as Rou ...
- 二维数组的认识及其表示元素的两种方式
/*============================================================================Name : TeatArr.cAuthor ...
- VFP 二维数组声明和ALEN() ASCAN() AFIELD() ADEL()函数
1.ALEN() 返回数组内元素的个数,或二维数组的行数或列数 例: local lnalen,lnrow,lncol,lncell select (employee) && 职员表的 ...
- Python找出二维数组中某个元素索引,自定义函数
#函数:找出二维数组中某个元素的索引 #功能:返回目标元素在原数组中出现位置的所有索引号 def found(List,AimList):#List:搜索数组,AimList:目标元素print('原 ...
- C语言子函数返回二维数组讨论
C语言中,在子函数中将一个二维数组返回 都知道,在子函数中,一定不能返回一个局部变量的指针,局部变量在子函数中进行创建,子函数调用结束后,该指针将被释放掉. 如果被指针所指向的该内存空间被别的程序占用 ...
最新文章
- Transformer-LS霸榜ImageNet,输入长度提升三倍!极度压缩参数
- 如何兼容並蓄Android Studio 與 Eclipse 的優點, 減少顧此失彼的缺憾
- css 字体大小_用一个 CSS 属性打造自适应网站
- div嵌套div 背景图片 不显示的问题
- vue父组件ajax改变数据,vue父组件传了变量给子组件,改变子组件的对象时,父组件也跟着改变...
- 加权残差连接ReZero
- python工作技巧_Python常用小技巧汇总
- 线程间通信及虚假唤醒
- 桌面图标及文件夹图标选中后,图标一圈出现白色虚线解决方法
- java剑姬_ListView和Adapter(文字列表)
- 一日一技:ASP.NET Core 判断请求是否为Ajax请求
- icpc网络赛第二场K Meal
- Discuz! X3.2后台管理员登录不了的问题
- 拷贝构造函数、析构函数、赋值操作符重载、取地址操作符重载和const修饰的取地址操作符重载...
- fdisk、parted无损调整普通分区大小
- 量子计算机组运算极限,拓扑量子计算
- 【Heydrones】飞手百科第一篇:一定要看的无人机原理总结
- 野火STM32F429学习笔记
- java水果爆炸动画_5分钟快速实现Android爆炸破碎酷炫动画特效的示例
- KB,Kb单位换算,网络带宽中的Kbps和KB/s到底是什么意思?
热门文章
- go-cqhttp系列教程-go-cqhttp安装
- uniapp 沉浸式状态栏
- LCD(液晶)显示器选购注意事项
- 活动推荐:限时领取免费9月8-9日SDCC大会门票,前10位回帖者可获得,仅限9月5日1天...
- 数据库概述-了解数据库-MySQL数据库服务配置-下载安装(强力推荐)
- java-php-python-ssm学生宿舍管理系统计算机毕业设计
- 皮尔逊相关(Pearson correlation)系数概述及其计算例
- 关于食品行业都有哪些资质认证?
- 计算机组成原理(第三版)唐朔飞-第六章计算机的运算方法-课后习题(1-16)
- css中盒子模型图片,CSS 盒子模型