C++多级指针与多维数组详细介绍
多级指针的概念
多级指针可对应于多维数组,这种指针变量中存的是另一个指针变量的地址,其说明如下:
int val=10;
int *ptr=&val;
int **pptr=&ptr;
int ***ppptr=&pptr; //是多少级指针就有多少*号
这里val值为10,*ptr值也为10,**pptr的值和***ppptr的值均为10。注意这里的*号与定义中的*号意义不同,前者是指针说明符,后者是运算符,称间接引用运算符。
【例5.13】多级指针。
#include<iostream>
using namespace std;
int main(){
int val=66;
int *pval = &val;
int **ppval = &pval;
cout<<"val="<<val<<'\n'<<"**ppval="<<**ppval<<'\n';
**ppval=18;
cout<<"val="<<val<<'\n'<<"**ppval="<<**ppval<<endl;
return 0;
}
指针两要素
指向数组(元素)类型的指针,与一维数组名是等效的:
int a[10], *pa =a;
则写pa[0] ,就是a[0];
*pa,即a[0];
*(pa+1) 和pa[1] ,都代表a[1]。
指针有两要素:地址和所指向目标的数据类型。a 与pa 两者都是一样的,所以pa 可以替代a。
二维数组与指针
二维数组是数组元素为一维数组的数组,所以等效的指针类型应该是指向一维数组的指针类型。如有:
int x2d[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
int (*pt)[4]=x2d;
则指针pt和x2d是等效的。它们表示的首地址一样,所指目标类型也一样,pt可以代替x2d,就象pa代替a一样。
指向一维数组的指针的定义如下:
数据类型 (* 指针变量名)[n];
这里数组元素的个数n不可省略。因是指向指针的指针,称二级指针。
【例5.14】用指向二维数组基本元素的指针变量,和用指向组成二维数组的一维数组的指针变量输出二维数组全部基本元素。
#include< iostream>
using namespace std;
int main( ){
int a[3][6]={{1,2,3,4,5,6},{7,8,9,10,11,12},{13,14,15,16,17,18}};
int * ptr,i,j;
ptr=&a[0][0] ; //或 ptr = *a; 而不能ptr = a;
for(i=0;i<18;i++){
cout<<*(ptr+i)<<'\t';
if(i%6==5) cout<<endl;
}
cout<<endl;
int (* ptr1)[6]; //注意 ptr1是指向包含6个整型元素的一维数组的指针
ptr1=a;
for(i=0;i<3;i++){
for(j=0;j<6;j++) cout<<*(*(ptr1+i)+j)<<'\t';
cout<<endl;
}
return 0;
}
用指向数组元素的指针把数组传递到函数里,同时传递行列信息,就可以实现通用性。
C++多级指针与多维数组详细介绍的更多相关文章
- 图解c/c++多级指针与“多维”数组
声明:本文为原创博文,如有转载,请注明出处.若本文有编辑错误.概念错误或者逻辑错误,请予以指正,谢谢. 指针与数组是C/C++编程中非常重要的元素,同时也是较难以理解的.其中,多级指针与“多维”数组更 ...
- 图解C/C++多级指针与多维数组
声明:本文转自 chenyang_yao ,欢迎阅读原文. 指针与数组是C/C++编程中非常重要的元素,同时也是较难以理解的.其中,多级指针与“多维”数组更是让很多人云里雾里,其实,只要掌握一定的方法 ...
- C语言数组篇(五)多级指针和二维数组指针的区别
多级指针 以二级指针为例 二级指针的由来是 指针数组 的指针形式. int *p[10] 读取的顺序是 p[] --> 10个空间的数组 * p[] --> 这10个空间的数组里面存放 ...
- C:指针遍历二维数组
C 指针遍历二维数组 http://blog.csdn.net/lcxandsfy/article/details/55000033 C++ 字符串指针与字符串数组 https://www.cnblo ...
- 论C语言中二级指针和二维数组之间的区别
刚开始学习C语言的时候,觉得一个数组可以定义一个一级指针去访问,想当然的就觉得可以定义一个二级指针去访问二维数组.很显然这是错误的. 我们来看看C语言的数组在内存中的存储方式. 实际上C语言中的数组, ...
- 20130330 printf数组改变 数组指针便利二维数组 二级指针遍历二维数组 ZigZag
1.为什么printf之后数组的值会改变? #include<stdio.h> ; int * Zigzag() { ,j=,limit=; ; ; int a[N][N]; int (* ...
- C语言中指针和多维数组
指针和多维数组 数组名是特殊的指针 数组是一个特殊的指针,多维数组也是更为复杂的数组,它们的关系是什么样的呢? 我们通过一个简单的例子来比较形象的了解指针和多维数组: int a[2][3]; 这是一 ...
- C指针与二维数组
先贴上完整的代码: #include<stdio.h> int main(int argc, char *argv[]){ int a[3] [5]={1,2,3,4,5,6,7,8,9, ...
- typedef 与指针、多维数组
1.在typedef中使用指针往往会带来意外的结果.如下: typedef string *pstring; const pstring cstr; 绝大数人刚开始都会认为cstr是一种指针,它指向c ...
随机推荐
- C#搜索指定文件夹内的符合要求的文件
下面的列子是文件的模糊查找, 具体功能是:选定文件夹,搜索所有文件命中包含“_bui”字样的shp图层(后缀为.shp)并将信息显示在ListView中.实际应用中可随便修改. 这里采用递归方法进行深 ...
- DevOps is dirty work - CI drives you crazy
一直很想谈谈Continuous Integration(CI),持续集成. 就在不久前一次朋友聚会上,一个刚刚跳槽到一家创业公司的朋友跟我抱怨说他们没有CI,没有code review,要做点事太累 ...
- JSON和数据集互相转换单元
如题......只是一个单元, 为了测试JSON单元性能的... 具体测试结果参考: http://www.cnblogs.com/hs-kill/p/3668052.html 代码中用到的Seven ...
- linux-shell笔记
1.当从windows拖到shell中无法传递文件时,多半可能没有权限,可用sudo rz来进行手动选择传递 2.连接虚拟机时,ssh 用户名@ip地址,然后会提示输入该虚拟机密码,输入密码即可连接 ...
- MVC 关于easyui-datebox 赋值问题
view <script type="text/javascript"> $(function () { var date = '@ViewData["end ...
- Redis入门指南(第2版) Redis设计思路学习与总结
https://www.qcloud.com/community/article/222 宋增宽,腾讯工程师,16年毕业加入腾讯,从事海量服务后台设计与研发工作,现在负责QQ群后台等项目,喜欢研究技术 ...
- [SharePoint 2013] Automatic deployment script
Implement automatic deployment through windows task. Add-PsSnapin Microsoft.SharePoint.PowerShell $t ...
- windows下Bat命令学习
一.基础语法:1.批处理文件是一个“.bat”结尾的文本文件,这个文件的每一行都是一条DOS命令.可以使用任何文本文件编辑工具创建和修改.2.批处理是一种简单的程序,可以用 if 和 goto 来控制 ...
- Java实现选择排序
选择排序思想就是选出最小或最大的数与第一个数交换,然后在剩下的数列中重复完成该动作. package Sort; import java.util.Arrays; public class Selec ...
- Xcode 运行cocos2dx弹出内部错误对话框(Internal Error)
cocos2dx未捕获的异常升高.选择"继续"继续运行在一个不一致的状态.选择"崩溃"停止应用和崩溃报告一个错误文件. 莫名其妙,代码没有报错,运行时却弹出(内 ...