一.二维数组

1.定义:

//方法一
int arr1[2][3];
//方法二
int arr2[2][3] = { {1,2,3},{4,5,6} };
//方法三
int arr3[2][3] = { 1,2,3,4,5,6 };
//方法四
int arr4[][3] = { 1,2,3,4,5,6 };

2.数组名称
作用:查看二维数组所占内存空间大小;获取二维数组首地址。

int arr[2][3] = { {1,2,3},{4,5,6} };
cout << "二维数组所占内存大小:" << sizeof(arr) << endl;
cout << "二维数组数组元素个数:" << sizeof(arr) / sizeof(arr[0][0]) << endl;
cout << "数组首地址:" << (int)arr << endl;
cout << "数组第一个元素地址:" << (int)&arr[0][0] << endl;
cout << "数组第一行地址:" << (int)(arr[0]) << endl;
cout << "数组第二行地址:" << (int)(arr+ 1) << endl;
cout << "数组第二行地址:" << (int)(arr[1]) << endl;
cout << "数组第二个元素地址(a[0][1]):" << (int)&arr[0][1] << endl;
//首地址+4*列*行
cout << "下一地址(注意与数组首地址区分):" << (int)( & arr + 1) << endl;

结果:

二.二维指针

1.申请二维指针

//申请二维数组
int row = 4, col = 5;
int** a = new int*[row];//先申请5行空间
for (int i = 0; i < row; i++) {a[i] = new int[col];//为每一行申请空间
}

2.释放二维指针

//释放空间
for (int i = 0; i < row; i++) {delete[] a[i];//释放每一行
}
delete[] a;

3.在内存中存储

三.数组指针

int (*p)[2] = new int[3][2];//数组指针

定义:
数组指针:顾名思义,“数组的指针”,是一个指针。
()的优先级高于【】,因此*先与p组成指针,然后在与【】构成数组指针。形成一个,指向含有两个int型数据数组的指针。

使用:

 int arr[5] = { 0,1,2,3,4 };int(*p1)[5] = &arr;//数组首地址(不是数组元素首地址)for (int i = 0; i < 5; i++)cout << (*p1)[i] << "\t";cout << endl;cout << endl;int a[3][5] = { 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14 };//二维数组p1 = a;//二维数组a首地址for (int i = 0; i < 3; i++) {for (int j = 0; j < 5; j++) {cout << (*(p1 + i))[j] << '\t';}cout << endl;}

由于p1存储的是数组的首地址。因此,在执行p1+1时,相当于arr+5.

在内存中存储:

四.指针数组

int* p[3];//指针数组

定义
指针数组,顾名思义“指针的数组”,即存放指针的数组。
因为【】的优先级要比 * 要高,所以 p 先与【】结合,构成一个数组的定义,数组名为 p,而int修饰的是数组的内容,即数组的每个元素。也就是说,该数组包含 5 个指向 int 类型数据的指针,

使用
创建和申请空间

 int* p[3];//指针数组//申请空间for (int i = 0; i < 3; i++) {p[i] = new int[4];//为每行申请4个int}

赋值

 int* p1[3];int a[3][4] = { 0,1,2,3,4,5,6,7,8,9,10,11 };for (int i = 0; i < 3; i++)p1[i] = a[i];//把二维数组a第i行给p1for (int i = 0; i < 3; i++){for (int j = 0; j < 4; j++)cout << p1[i][j] << '\t';cout << endl;}

 const char* s[3] = { "abc","def","ghi" };for (int i = 0; i < 3; i++)cout << s[i] << endl;

在内存中存储

参考:
https://blog.csdn.net/men_wen/article/details/52694069
http://c.biancheng.net/view/335.html

c++二维数组、二维指针、数组指针、指针数组相关推荐

  1. 【C 语言】二级指针内存模型 ( 指针数组 | 二维数组 | 自定义二级指针 | 将 一、二 模型数据拷贝到 三 模型中 并 排序 )

    文章目录 一.指针数组 和 二维数组 数据 拷贝到 自定义二级指针 中 1.函数形参 设计规则 2.三种内存模型 对应 函数形参 指针退化规则 二.完整代码示例 一.指针数组 和 二维数组 数据 拷贝 ...

  2. 【C 语言】二级指针 内存模型图 ( 指针数组 | 二维数组 | 自定义二级指针内存 )

    文章目录 前言 一.指针数组 二.二维数组 三.自定义二维指针内存 前言 绘制如下 333 种二级指针的内存模型 : // I. 指针数组 char *p1 []= {"12", ...

  3. 【C 语言】二级指针作为输入 ( 二维数组 | 二维数组遍历 | 二维数组排序 )

    文章目录 一.二维数组 1.二维数组声明及初始化 2.二维数组遍历 3.二维数组排序 二.完整代码示例 一.二维数组 前几篇博客中 , 介绍的是指针数组 ; 指针数组 的 结构特征 是 , 数组中的每 ...

  4. 一维数组,二维数组,三维数组,数组与指针,结构体数组,通过改变指针类型改变访问数组的方式

     打印数组中的每个元素,打印每个元素的地址: #include <stdio.h> #include <stdlib.h> void main(void) { int a[ ...

  5. C语言学习之有一个3X4的二维数组,要求用指向元素的指针变量输出二维数组各元素的值

    有一个3X4的二维数组,要求用指向元素的指针变量输出二维数组各元素的值. int main(){int a[3][4];int i,j,*p;//p是 int *型指针变量printf("请 ...

  6. c++ 二维数组_【技术篇】C指针与二维数组深度辨析

    一.源代码 /*第01行*/ CLion 2019.3.4 x64中编写的源代码·截图 二.深度辨析 CLion 2019.3.4 x64中编译的结果·截图 zippo[4][2]是一个四行二列的in ...

  7. C++之指针探究(五):数组指针和二维数组

    前文:C++之指针探究(四):指针和二维数组 回顾:初始化二维数组时可以"偷懒":int array[2][3]={{0,1,2},{3,4,5}}; 可以写成:int array ...

  8. c++ 二维数组_C|数形结合理解数组指针、指针数组、一级指针来遍历二维数组

    二维数组本质是也是线性存储的一维数组,各元素都是相对于基地址(首地址)的偏移,只是逻辑上的维度区分而已.或者可以理解为数组的数组,也就是说,n维数组的元素是一个n-1维数组. 需要注意的是,多维数组名 ...

  9. 二维数组名、二维数组名取地址、二级指针

    先给出结论,便于以后查阅: 首先给出几个定义: typedef int (*p1x4)[4];//定义数据类型,p1x4这种类型为指向含4个int元素的1维数组的指针 typedef int (*p3 ...

  10. 【C语言】指针表达进阶:指针在一维数组、二维数组的应用(如何用指针表达一维数组、二维数组的元素的地址、元素值)

    指针可以替代数组名 1.在一维数组中:int a[9]; int *p=a; 一维数组名指向的是列!(后面总结,迷得话不用慌) 则想要获取a[i]的地址方法:a+i; .p+i; .p[i]; 获取a ...

最新文章

  1. 实现跨浏览器的HTML5占位符
  2. 图像的灰度级数越多越好_MATLAB-数字图像处理 图像直方图归一化
  3. 简单安装ELK分析日志及使用心得
  4. 【原创】MySQL里求给定的时间是所在月份的第几个礼拜
  5. python网格搜索法_Python中基于网格搜索算法优化的深度学习模型分析糖尿病数据...
  6. oracle表,视图,存储过程,函数,序列.....查询
  7. Android进阶:ListView性能优化异步加载图片 使滑动效果流畅
  8. java微信刷卡支付demo_微信刷卡支付例子
  9. elasticsearch核心原理
  10. 最强抓包神器 Fiddler 手机抓包详解
  11. 常见的工业通讯协议有哪些
  12. matlab遗传算法求解TSP旅行商问题
  13. 手机怎么压缩gif动图大小?推荐一款gif压缩的工具
  14. 狗年出生的宝宝取名都有哪些注意事项呢?起名真不是简单事
  15. 服务器建网站要数据库,云服务器建网站需要数据库
  16. darknet测试voc数据集精度
  17. 小牛电动为何沉迷于打造“社区文化”?
  18. 【flash】 水果忍者
  19. 【年薪百万之IT界大神成长之路零】年薪百万之IT界大神成长之路
  20. 应用html的DIV+CSS制作牛顿摆

热门文章

  1. GIT没有关联小图标(红色、绿色图标)解决方案
  2. C4D模型工具—细分
  3. 产品样机展示客户不满意?试试用Visualize这样做!
  4. nyoj 203 三国志 dijkstra+01背包
  5. 防撤回神器,免ROOT查看撤回消息!再也不用担心错过劲爆消息!
  6. 牛客OI周赛7-提高组(A 小睿睿的等式)
  7. 约瑟夫环(循环链表)
  8. 利用SMB协议实现局域网内设备文件的共享
  9. win7安装office2007失败
  10. win7系统安装office 2010 visio 出现MSXML安装后依旧无法安装的解决办法