C++ 指针二维数组, C++二维指针数组笔记
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++二维指针数组笔记的更多相关文章
- C语言提高 (3) 第三天 二级指针的三种模型 栈上指针数组、栈上二维数组、堆上开辟空间
		1 作业讲解 指针间接操作的三个必要条件 两个变量 其中一个是指针 建立关联:用一个指针指向另一个地址 * 简述sizeof和strlen的区别 strlen求字符串长度,字符数组到’\0’就结束 s ... 
- C/C++二维数组名和二级指针
		转载 :https://blog.csdn.net/wu_nan_nan/article/details/51741030 作者:吴一奇 1. 指针1.1 一个指针包含两方面:a) 地址值:b) 所 ... 
- c++指针数组与二维数组的最大区别
		下面随笔是关于指针数组说明及与二维数组的最大区别. 指针数组 数组的元素是指针型 例 利用指针数组存放矩阵 1 #include 2 using namespace std; 3 int main() ... 
- C语言通过指针数组和二维数组读取文件
		1 # include <stdio.h> 2 # include <stdlib.h> 3 # include <time.h> 4 # include < ... 
- c++ 依据输入动态声明数组(一维,二维)
		较早的编译器是不同意这样做的,所以一些书籍比方以Tc解说的书本都说数组的下标不能是变量.在vc6.0下亦是如此. 只是在一些较新的编译器如dev c++已经支持了,例如以下代码不会报错 #includ ... 
- C语言一维数组、二维数组、结构体的初始化
		C语言数组的初始化表示方法 一.C语言一维数组初始化: (1)在定义数组时对数组元素赋以初值.如: static int a[10]={0,1,2,3,4,5,6,7,8,9}; 经过上面的定义和初始 ... 
- C#的一维数组和二维数组定义方式:
		一维数组: //一维数组定义与初始化 ,, };//第一种方式 , , }; //第二种方式 int[] one3; //第三种方式 one3=,,}; 二维数组: //二维数组定义与初始化 //不规 ... 
- 【C语言学习】-05 二维数组、字符串数组、多维数组
		⼆二维数组.字符串数组.多维数组 
- C#  数组、一维数组、二维数组、多维数组、锯齿数组
		C# 数组.一维数组.二维数组.多维数组.锯齿数组 一.数组: 如果需要使用同一类型的对象,就可以使用数组,数组是一种数据结构,它可以包含同一类型的多个元素.它的长度是固定的,如长度未知的情况下,请 ... 
- 《Javascript权威指南》学习笔记之十二:数组、多维数组和符合数组(哈希映射)
		Array(数组)是JavaScript中较为复杂的数据类型,同Java.C#.VB等程序语言的数组相比.Javascript数组中的元素不必为同样的数据类型,能够在数组每一个元素上混合使用数字.日期 ... 
随机推荐
- 深入理解Linux内核-进程调度
			1.什么时候进行进程切换 调度策略目标:1.进程响应尽量快:2.后台作业吞吐量尽量高:3.尽可能避免进程饥饿:4.低优先级和高优先级进程需要尽量调和. 调度策略:决定什么时候选择什么进程运行的规则.基 ... 
- Android-优化UI性能(1)-降低主线程的堵塞时间
			Android-优化UI性能(1)-降低主线程的堵塞时间 一 降低主线程的堵塞时间 Android已经提供了AsyncTask实现从主线程生成新的异步任务的方法. 定义并实现以下的类就可以(方法由系统 ... 
- LL&LR parser
			https://stackoverflow.com/questions/5975741/what-is-the-difference-between-ll-and-lr-parsing https:/ ... 
- 如何高效的学习 TensorFlow 代码? 以及TensorFlow相关的论文
			https://www.zhihu.com/question/41667903 源码分析 http://www.cnblogs.com/yao62995/p/5773578.html 如何贡献Tens ... 
- react-scripts的css modules
			用create-react-app创建的项目基于react-scripts内建支持css modules,需要把css文件名改成filename.module.css,导入方式需要改成: import ... 
- Standard C 之 math.h和float.h
			对于C Standard Library 可以参考:http://www.acm.uiuc.edu/webmonkeys/book/c_guide/ 或者 http://www.cplusplus.c ... 
- js的深入学习课程Object.prototype.toString.call()
			1.通过 Object.prototype.toString.call() 进行类型判断 function isArray(obj) { return Object.prototype.toStrin ... 
- Python(八)之函数
			Python函数 函数作用: (1)代码重用 (2)一种设计工具,分解复杂问题 (3)将相关功能打包并参数化 函数种类: 全局函数:定义在模块中 局部函数:嵌套在其他函数中 lambda函数:表达式 ... 
- idea 改变version control
			idea 当一个moudule拥有2个VCS的时候 如何切换其应用的VSC 如拥有 SVN 和 GIT 2个版本 ,想换回SVN则删除 git目录 将 version control vcs 设 ... 
- poj2965(位运算压缩+bfs+记忆路径)
			题意:有个4*4的开关,里面有着16个小开关 -+-- ---- ---- '+'表示开关是关着的,'-'表示开关是开着的,只有所有的开关全被打开,总开关才会被打开.现在有一种操作,只要改变某个开关, ... 
