C++ 二维动态数组

一、 已知第一维

#include <iostream>

using namespace std;

int main(int argc, char const *argv []){
int M = ;
int n = ; // 声明数组行指针
char * a[M]; for (int i = ; i < M; i++) {
// 声明数组列指针
a[i] = new char[n];
// 列赋值
for (int j = ; j < n; j ++){
a[i][j] = j;
}
}
// 打印值
for (int i = ; i < M; i++){
for (int j = ; j < n; j++){
printf("%d ", a[i][j]);
}
printf("\n");
} // 打印行指针
printf("a[0] : %p\n", a[]);
printf("a[0] : %p\n", *(a+));
// 打印具体位置指针
printf("a[0][0]: %p\n", *(a+)+);
printf("a[0][3]: %p\n", *(a+)+);
// 值的打印方法
printf("a[1][2]: %d\n", *(*(a+)+));
printf("a[1][2]: %d\n", a[][]); // delete 内存
for (int i = ; i < M; i++){
delete [] a[i];
} return ;
}

二、两维都不知道

#include <iostream>

using namespace std;

int main(int argc, char const *argv []){

  int rowsNum = ;
int columnsNum = ; // 两维都不知道
char **a;
a = new char * [rowsNum]; for (int i = ; i < rowsNum; i++) {
a[i] = new char [columnsNum];
for (int j = ; j < columnsNum; j++) {
a[i][j] = j;
printf("%d ", a[i][j]);
}
printf("\n");
} printf("%d\n", sizeof(a)); for (int i = ; i < rowsNum; i++) {
delete [] a[i];
}
delete [] a; return ;
}

三、已知第二维

四、 已知第一维, 一次分配内存(保证内存连续性)

五、 两维都未知, 一次分配内存(保证内存的连续性)

    多说一句:new和delete要注意配对使用,即有多少个new就有多少个delete,这样才可以避免内存泄漏!

C++ 指针二维数组, C++二维指针数组笔记的更多相关文章

  1. C语言提高 (3) 第三天 二级指针的三种模型 栈上指针数组、栈上二维数组、堆上开辟空间

    1 作业讲解 指针间接操作的三个必要条件 两个变量 其中一个是指针 建立关联:用一个指针指向另一个地址 * 简述sizeof和strlen的区别 strlen求字符串长度,字符数组到’\0’就结束 s ...

  2. C/C++二维数组名和二级指针

    转载 :https://blog.csdn.net/wu_nan_nan/article/details/51741030  作者:吴一奇 1. 指针1.1 一个指针包含两方面:a) 地址值:b) 所 ...

  3. c++指针数组与二维数组的最大区别

    下面随笔是关于指针数组说明及与二维数组的最大区别. 指针数组 数组的元素是指针型 例 利用指针数组存放矩阵 1 #include 2 using namespace std; 3 int main() ...

  4. C语言通过指针数组和二维数组读取文件

    1 # include <stdio.h> 2 # include <stdlib.h> 3 # include <time.h> 4 # include < ...

  5. c++ 依据输入动态声明数组(一维,二维)

    较早的编译器是不同意这样做的,所以一些书籍比方以Tc解说的书本都说数组的下标不能是变量.在vc6.0下亦是如此. 只是在一些较新的编译器如dev c++已经支持了,例如以下代码不会报错 #includ ...

  6. C语言一维数组、二维数组、结构体的初始化

    C语言数组的初始化表示方法 一.C语言一维数组初始化: (1)在定义数组时对数组元素赋以初值.如: static int a[10]={0,1,2,3,4,5,6,7,8,9}; 经过上面的定义和初始 ...

  7. C#的一维数组和二维数组定义方式:

    一维数组: //一维数组定义与初始化 ,, };//第一种方式 , , }; //第二种方式 int[] one3; //第三种方式 one3=,,}; 二维数组: //二维数组定义与初始化 //不规 ...

  8. 【C语言学习】-05 二维数组、字符串数组、多维数组

    ⼆二维数组.字符串数组.多维数组

  9. C# 数组、一维数组、二维数组、多维数组、锯齿数组

    C#  数组.一维数组.二维数组.多维数组.锯齿数组 一.数组: 如果需要使用同一类型的对象,就可以使用数组,数组是一种数据结构,它可以包含同一类型的多个元素.它的长度是固定的,如长度未知的情况下,请 ...

  10. 《Javascript权威指南》学习笔记之十二:数组、多维数组和符合数组(哈希映射)

    Array(数组)是JavaScript中较为复杂的数据类型,同Java.C#.VB等程序语言的数组相比.Javascript数组中的元素不必为同样的数据类型,能够在数组每一个元素上混合使用数字.日期 ...

随机推荐

  1. 行为类模式(十):模板方法(Template Method)

    定义 定义一个操作中的算法的骨架,而将步骤延迟到子类中.模板方法使得子类可以不改变一个算法的结构即可重定义算法的某些特定步骤. UML 优点 模板方法模式通过把不变的行为搬移到超类,去除了子类中的重复 ...

  2. android 去掉标题栏、状态栏、横屏

    // 去掉标题栏 supportRequestWindowFeature(Window.FEATURE_NO_TITLE); // 全屏.隐藏状态栏 getWindow().setFlags(Wind ...

  3. FFmpeg AVPacket和AVFrame区别

    简介 AVPacket:存储压缩数据(视频对应H.264等码流数据,音频对应AAC/MP3等码流数据)AVFrame:存储非压缩的数据(视频对应RGB/YUV像素数据,音频对应PCM采样数据)

  4. CNN及其可解释性

    https://stats385.github.io/readings https://arxiv.org/pdf/1311.2901.pdf A Mathematical Theory of Dee ...

  5. JAVA CAS原理深度分析 volatile,偏向锁,轻量级锁

    JAVA CAS原理深度分析 http://blog.csdn.net/hsuxu/article/details/9467651 偏向锁,轻量级锁 https://blog.csdn.net/zqz ...

  6. 18、利用 Windows Device Portal 获取用户闪退 dump

    当 uwp在用户的电脑上发生了闪退,并且由于用户距离较远,不便于使用 VS进行远程 Debug,更不可能让用户安装 Visual Studio进行分析的时候,在用户的电脑上收集 dump 是一种有效的 ...

  7. #define SIG_DFL ((void(*)(int))0)

    在linux内的信号处理函数中,有#define SIG_DFL ((void(*)(int))0)和#define SIG_IGN ((void(*)(int))1)两个宏定义.要理解这两个宏定义, ...

  8. 基于jQuery个性圆圈倒计时特效

    基于jQuery个性圆圈倒计时特效里面包含十几款不用效果的jQuery倒计时特效下载.效果图如下: 在线预览   源码下载 实现的代码. html代码: <section class=" ...

  9. 动态可视化 数据可视化之魅D3,Processing,pandas数据分析,科学计算包Numpy,可视化包Matplotlib,Matlab语言可视化的工作,Matlab没有指针和引用是个大问题

    动态可视化 数据可视化之魅D3,Processing,pandas数据分析,科学计算包Numpy,可视化包Matplotlib,Matlab语言可视化的工作,Matlab没有指针和引用是个大问题 D3 ...

  10. [转]Teleport Ultra/Teleport Pro的冗余代码批量清理方法

    原文地址:http://www.abcd9.com/?post=402 Teleport Pro 是款优秀的网站离线浏览工具(即网站整站下载工具),Teleport Ultra是其增强版,但使用此系列 ...