原理:二级指针,行指针+列指针

照着葫芦画瓢就行。

方法一:用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.1 二维数组的内存映像 从内存角度看,二维数组和一维数组一样,在内存中都是连续分布的多个内存单元,并没有本质差别,只是内存的管理方式不一样,如下图所示 一维数组int a[ ...

  2. java二维数组添加元素_Java二维数组与动态数组ArrayList类详解

    java二维数组 java 语言中提供的数组是用来存储固定大小的同类型元素. 1.二维数组初始化和声明 数组变量的声明,和创建数组可以用一条语句完成,如下所示: int a[][] = new int ...

  3. arraylist 初始化_Java二维数组和动态数组ArrayList 类

    Java二维数组 Java 语言中提供的数组是用来存储固定大小的同类型元素. 1.二维数组初始化和声明 数组变量的声明,和创建数组可以用一条语句完成,如下所示: int a[][] = new int ...

  4. 动态二维数组外圈元素值的和_C语言 | 用指向元素的指针变量输出二维数组元素的值...

    例33:有一个3*4的二维数组,要求用C语言实现指向元素的指针变量输出二维数组个元素的值. 解题思路:二维数组的元素时整型的,它相当于整型变量,可以用int*型指针变量指向它.二维数组的元素在内存中是 ...

  5. 16 React【无人点餐无人收银系统案例】路由配置、菜品列表制作、请求数据渲染二维数组、动态路由传值 【基础项目】

    一.页面 二.react-router4.x 路由配置 App.js import React from "react";import { BrowserRouter as Rou ...

  6. 二维数组的认识及其表示元素的两种方式

    /*============================================================================Name : TeatArr.cAuthor ...

  7. VFP 二维数组声明和ALEN() ASCAN() AFIELD() ADEL()函数

    1.ALEN() 返回数组内元素的个数,或二维数组的行数或列数 例: local lnalen,lnrow,lncol,lncell select (employee) && 职员表的 ...

  8. Python找出二维数组中某个元素索引,自定义函数

    #函数:找出二维数组中某个元素的索引 #功能:返回目标元素在原数组中出现位置的所有索引号 def found(List,AimList):#List:搜索数组,AimList:目标元素print('原 ...

  9. C语言子函数返回二维数组讨论

    C语言中,在子函数中将一个二维数组返回 都知道,在子函数中,一定不能返回一个局部变量的指针,局部变量在子函数中进行创建,子函数调用结束后,该指针将被释放掉. 如果被指针所指向的该内存空间被别的程序占用 ...

最新文章

  1. keras 的 example 文件 mnist_transfer_cnn.py 解析
  2. Linux从mysql中读取数据_linux shell中读写操作mysql数据库
  3. 优秀!广州“土博士”刚毕业,即获海外名校终身教职!
  4. P4报名截止|引爆1.1万亿基因测序市场,精准医学50+殿堂级专家议程大曝光
  5. js页面传值php页面,php实现跳转传值有什么方法,js页面跳转传值
  6. AsciidocFX相关
  7. vasp软件全名是什么_VaspCZ软件详细介绍
  8. 【2022最新】最新桌面CPU显卡天梯图
  9. Java车辆牌照识别
  10. 教程篇:《基础模块4》金蝶K3WISE15.0-客户端安装与卸载
  11. Ubuntu20.04安装详细图文教程(双系统)
  12. 基于PCL的QT开发(两个月内更新完)
  13. 【阿里巴巴/腾旭】mysql面试题汇总
  14. 30岁以前不要去在乎的29件事
  15. 程序员上班刷简历!领导看见表示寒心竟还想挽留?
  16. Keras实例教程(1)
  17. 点云配准各种方法总结[不定时更新]
  18. 熵值法与TOPSIS法以及两者结合
  19. cpu2017的526.blender编译出错原因
  20. No operations allowed after statement closed

热门文章

  1. python bs4 库简介
  2. 不发钱,项目经理怎么激励团队?
  3. 文盲的Python入门日记:第六天,继续完善我们的MsSql类,支持查询结果的筛选和排序,以及日期类型
  4. 1.3 Photoshop工作区的操作讲解 [Ps教程]
  5. 快递100发货模板代码,发货前订阅消息推送,发货后直接更新最新物流信息
  6. 酱牛肉的制作方法:三种
  7. IE-LAB网络实验室:CCNA认证书找工作有用吗?
  8. 【Web前端】——HTML基础知识总结
  9. PAT 乙级 1018 锤子剪刀布 (20分)
  10. 小学生python游戏编程arcade----基本知识3