多级指针的概念

多级指针可对应于多维数组,这种指针变量中存的是另一个指针变量的地址,其说明如下:
    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++多级指针与多维数组详细介绍的更多相关文章

  1. 图解c/c++多级指针与“多维”数组

    声明:本文为原创博文,如有转载,请注明出处.若本文有编辑错误.概念错误或者逻辑错误,请予以指正,谢谢. 指针与数组是C/C++编程中非常重要的元素,同时也是较难以理解的.其中,多级指针与“多维”数组更 ...

  2. 图解C/C++多级指针与多维数组

    声明:本文转自 chenyang_yao ,欢迎阅读原文. 指针与数组是C/C++编程中非常重要的元素,同时也是较难以理解的.其中,多级指针与“多维”数组更是让很多人云里雾里,其实,只要掌握一定的方法 ...

  3. C语言数组篇(五)多级指针和二维数组指针的区别

    多级指针   以二级指针为例 二级指针的由来是 指针数组 的指针形式. int *p[10] 读取的顺序是 p[] --> 10个空间的数组 * p[] --> 这10个空间的数组里面存放 ...

  4. C:指针遍历二维数组

    C 指针遍历二维数组 http://blog.csdn.net/lcxandsfy/article/details/55000033 C++ 字符串指针与字符串数组 https://www.cnblo ...

  5. 论C语言中二级指针和二维数组之间的区别

    刚开始学习C语言的时候,觉得一个数组可以定义一个一级指针去访问,想当然的就觉得可以定义一个二级指针去访问二维数组.很显然这是错误的. 我们来看看C语言的数组在内存中的存储方式. 实际上C语言中的数组, ...

  6. 20130330 printf数组改变 数组指针便利二维数组 二级指针遍历二维数组 ZigZag

    1.为什么printf之后数组的值会改变? #include<stdio.h> ; int * Zigzag() { ,j=,limit=; ; ; int a[N][N]; int (* ...

  7. C语言中指针和多维数组

    指针和多维数组 数组名是特殊的指针 数组是一个特殊的指针,多维数组也是更为复杂的数组,它们的关系是什么样的呢? 我们通过一个简单的例子来比较形象的了解指针和多维数组: int a[2][3]; 这是一 ...

  8. C指针与二维数组

    先贴上完整的代码: #include<stdio.h> int main(int argc, char *argv[]){ int a[3] [5]={1,2,3,4,5,6,7,8,9, ...

  9. typedef 与指针、多维数组

    1.在typedef中使用指针往往会带来意外的结果.如下: typedef string *pstring; const pstring cstr; 绝大数人刚开始都会认为cstr是一种指针,它指向c ...

随机推荐

  1. 第一章-第七题( 有人认为,“中文编程”, 是解决中国程序员编程效率一个秘密武器,请问它是一个 “银弹” 么? )--By 侯伟婷

    首先,“银弹”在百度百科中的解释是银色的子弹,我们更熟知的“银弹”一词,应该是在<人月神话>中提到的.银弹原本应该是指某种策略.技术或者技巧可以极大地提高程序员的生产力[1].此题目中关于 ...

  2. Unity_Shader(1)

    Shader需要作用在Material中才能起作用. 例子1: (1)创建Shader 将shader替换为以下代码: Shader"MyDir/FirstShader" { Su ...

  3. AD Local Domain groups, Global groups and Universal groups

    http://ss64.com/nt/syntax-groups.html Rules that govern when a group can be added to another group ( ...

  4. php如何查看变量是真实被引用

    $var1 = 'Hello World'; $var2 = ''; $var2 =&$var1; debug_zval_dump(&$var1); $a = "aaa&qu ...

  5. golang: 常用数据类型底层结构分析

    虽然golang是用C实现的,并且被称为下一代的C语言,但是golang跟C的差别还是很大的.它定义了一套很丰富的数据类型及数据结构,这些类型和结构或者是直接映射为C的数据类型,或者是用C struc ...

  6. 网络监测工具-iftop教程

    在类Unix系统中可以使用top查看系统资源.进程.内存占用等信息.查看网络状态可以使用netstat.nmap等工具.若要查看实时的网络流量,监控TCP/IP连接等,则可以使用iftop. 一.if ...

  7. CSS使用position定位后导致元素浮动

    1.子元素 absolute/fixed定位后,子元素脱离文档流存在,它让出原来占的那个坑,父元素再也不能通过子元素来撑开高度了 <style> div{ position:absolut ...

  8. 17+个ASP.NET MVC扩展点【附源码】

    1.自定义一个HttpModule,并将其中的方法添加到HttpApplication相应的事件中!即:创建一个实现了IHttpmodule接口的类,并将配置WebConfig.  在自定义的Http ...

  9. log4net 按时间输出日志

    参考:(转)非常完善的Log4net详细说明 log4net 按天与按小时记日志的配置 Log4net 中输出日志到文件,文件名根据日期生成 log4net按日志级别(debug,info,warn, ...

  10. how-to-install-siege-on-centos-7

    https://www.joedog.org/siege-home/ https://roastahost.com/how-to-install-siege-on-centos-7/ (Works!) ...