首先二维数组的本质就是数组的数组。

如下数组

int p[2][3]={1,2,3,4,5,6}

然后我想直接传送这个二维数组给函数:

void fun(int **p);

然后想当然,这样传了, fun(p) 可想而知,编译不通过,编译器提示p是一个 int  (*)[3]的指针,

我看了C++  primer上的描述如下:

与普通数组一样,使用多维数组名时,实际上将其自动转化为指向该数组第一个元素的指针。 注意:这里的该数组指的是多维数组,比如上面的p是指向的数组的数组指针, 类型为 int (*)[3]

用typedf来简化上面的表达,更加直观

  typedef int ershu [3];  ershu *pp=p;

现在来看指针地址的值

    for(int i=0;i!=2;++i){for(int j=0;j!=3;++j){cout<<&(p[i][j])<<" ";}cout<<endl;
}

输出了各个数组的地址:

1  ,2 ,3

4 ,5 ,6

可以看到这样分配的数组的地址是连续的,下面还会讲到动态数组

再来看p ,  *p的值

cout<<p<<"  "<<*p<<endl;

这里是一样的,虽然他们指的东西不一样,*p 指向的是多维数组p中第一维数组的第一个元素y(y是一个int [3]数组)的第一个元素,有点拗口。

指针是可以运算的,再看分别给p  *p 加1后的地址

cout<<p+1<<"  "<<*p+1<<endl;

p+1 地址增加了12  ,*p +1 地址增加了4 可见他们所在的维是不一样的。

如果用p[i][j]的下标方式,它的地址是通过公式 p+C(i*b+j) 来得到,p为基地址,C为数据的字节长,b表示第二维的大小 这里为3 。

如果动态数组如下方式建立:

int **pp=new int*[2];
pp[0]=new int[3]; pp[1]=new int[3];
for(int i=0;i!=2;++i){for(int j=0;j!=3;++j){cout<<&(pp[i][j])<<" ";}cout<<endl;
}

得到的内存空间不是连续的。并且因为是不连续的

pp  和 *pp 指向的地址 也是不一样的:

至于为什么动态和静态不一样,我还没有想明白,想明白了再写

关于C++二维数组及指针的整理相关推荐

  1. 二维数组及其指针基础

    编程学习-二维字符串数组的初始化-动态内存分配 动态内存分配 1.堆内存分配 : C/C++定义了4个内存区间:代码区,全局变量与静态变量区,局部变量区即栈区,动态存储区,即堆 (heap)区或自由存 ...

  2. C++ 二维数组和指针数组

    C++ 二维数组和指针数组 开发工具与关键技术:C++.VisualStudio 作者:何任贤 撰写时间:2019年04月10日 二维数组大家都很清楚,就是该数组包含的元素是一个数组,那么和指针数组又 ...

  3. c++17(26)-数组、二维数组的指针、指向数组的指针、指向数组的指针的指针

    #include <iostream> #include <string.h> using namespace std;void setC1(int a[],int size) ...

  4. c++如何打印一维数组首地址_C语言之二维数组和指针的结合

    最近在练习 C 语言计算机二级的程序设计题,碰到了二维数组和指针的结合,当时怎么调试都不对,自己也记不清楚该怎么用了就跑去看书翻资料重新复习.自己纠结的问题是二维数组 int a[3][4]的数组名是 ...

  5. c语言二维数组 ppt,C语言二维数组与指针.ppt

    C语言二维数组与指针.ppt 好好考,全国计算机等级考试 二级C语言,第12讲 二维数组与指针,二维数组的定义 数组元素的引用及初始化 二维数组和指针 二维数组名和指针数组作为实参 二维数组程序举例 ...

  6. C语言-二维数组与指针

    目录 1 指针和二维数组 2 二维数组做函数的参数 2.1 方法一 2.2 方法二 2.3 方法三 1 指针和二维数组 #include <stdio.h>int main() {int ...

  7. C语言二维数组的指针写法

    C语言中二维数组要用Int** 来表示,在分配空间后,int**加一会移动到下一行.而m行n列的二维数组的寻址方式是首地址a+in+j,因此先对a+i找到相应的行,也就是一维数组,并且取得到一个int ...

  8. C语言高级编程:二维数组、指针的指针、数组指针、指针数组

    1. 定义 int **p;  指针的指针 int (*p2)[5];  数组指针,指向一个数组 int *array[5];  指针数组,是一个int *类型数组 int array2[3][5]; ...

  9. 指向二维数组的指针测试

    定义a为二维数组后,有三种成份:数组本身.3个一维数组(a的每一行对应一个一维数组).12个数组元素, 由此就有三种指针及对应的指针变量, &a和int (*p1)[3][4](没有实用意义) ...

最新文章

  1. Java中的数据结构
  2. php smtp报文_PHP 使用 SMTP 发送邮件教程(PEAR Mail 包)
  3. BBC Studios与字节跳动达成海量内容合作协议
  4. python绘制条形图 中文横坐标_Pyhon绘制数据范围条形图
  5. 浏览器的全屏功能小结
  6. ActiveMQ 命令行启动 与 嵌入式启动、MessageListener 监听消息
  7. msys2编译ffmpeg:ERROR: libx264 not found
  8. mysql批量修改表中大小写_SQL语句大小写是否区分的问题,批量修改整个数据库所有表所有字段大小写...
  9. 外网访问群晖设置ddns教程
  10. 用Python+Appium自动写网课考试
  11. 周记录学习总结<大杂烩>
  12. 【Unity3D开发小游戏】《文字冒险游戏》Unity开发教程
  13. 我所遇见的bug 系列1 win7在生成的程序里,播放音频时没声音
  14. 连接服务器没有发挥作用,iPhone“连到系统上的设备没有发挥作用”原因分析及解决方法...
  15. [HNOI 2008] 神奇的国度 kingdom
  16. ubuntu设置文件夹共享
  17. 硅谷“钢铁侠”:最不爱钱的人,却成了最有钱的人!
  18. 搭建自己的frp服务器
  19. 【Qualcomm高通音频】如何区分配置ECM驻极体麦克风和MEMS硅麦克风
  20. c++中atan2函数_atan2()函数以及C ++中的示例

热门文章

  1. EOS智能合约开发(十八)从EOS数据分析history_plugin插件和mongo_db_plugin插件区别级EOS网络MongoDB配置
  2. 【OpenCV 笔记】编译Opencv contrib模块
  3. mysql外键约束失败
  4. 51单片机串口通信模板_51单片机串口通信实例
  5. 快速创建微信小程序,注册即认证,无需300元认证费
  6. 使用sed命令规范化文档
  7. 人生苦短,我用 Python,如何学习 Python 网络爬虫?
  8. 苹果开发者账号如何Upload CSR file
  9. (翻译)Few-Shot Object Detection with Attention-RPN and Multi-Relation Detector具有注意力RPN和多关系检测器的小样本目标检测
  10. Airtest 的常用库——poco