zoukankan      html  css  js  c++  java
  • 数组指针和指针数组

    这两天多次被人问起涉及这方面的问题,自己一直都不太懂,也没有好好回答,现在给自己扫下盲。//以下内容大多数为转载,参杂少数个人看法,如若不妥请告知。

    数组指针(行指针)

    定义 int (*p)[n];

    ()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个整型数据的长度。

    如要将二维数组赋给一指针,应这样赋值:
    int a[3][4];
    int (*p)[4]; //该语句是定义一个数组指针,指向含4个元素的一维数组。

          //个人理解类似数据结构中的桶结构 4作为所带元素个数
     p=a;        //将该二维数组的首地址赋给p,也就是a[0]或&a[0][0]
     p++;       //该语句执行过后,也就是p=p+1;p跨过行a[0][]指向了行a[1][]

    比如要表示数组中i行j列一个元素:
    *(p[i]+j)、*(*(p+i)+j)、(*(p+i))[j]、p[i][j]。

    所以与其叫数组指针不如叫行指针更为贴切。

    这样写是会报错的:

    1   int a[2][3]={{1,2,3},{4,5,6}};
    2   int (*p)[3];
    3   p=a;
    4   for(int i=0;i<3;i++)
    5       cout<<(*p)++<<endl;
    

    这样写会输出地址:

    1     int a[2][3]={{1,2,3},{4,5,6}};
    2     int (*p)[3];
    3     p=a;
    4     for(int i=0;i<3;i++)
    5         cout<<*p++<<endl;

    用途:

    指针数组常适用于指向若干字符串,这样使字符串处理更加灵活方便。

    指针数组

    定义 int *p[n];

    n个int类型的指针元素组成的数组。

        int a=1,b=2,c=3;
        int *p[3]={&a,&b,&c};

    输出:

    此时的p为指向数组指针的指针,所以和p[0]的值不同。

    在写到p[5]的时候崩溃了(why?)

  • 相关阅读:
    wxpython(2)--按钮,位图按钮,滑动块,微调控制器
    获取网站title的脚本
    很酷的前端切图 | Sunny Day
    分析Java中的length和length()
    打破与被打破
    不错的东西: AutoMapper
    一个很不错的支持Ext JS 4的上传按钮
    [网络分析]WEBQQ3.0协议分析---good good study
    【翻译】提示18——如何决定ObjectContext的生命周期
    为什么要使用“var me=this”这样的写法
  • 原文地址:https://www.cnblogs.com/verlen11/p/4153901.html
Copyright © 2011-2022 走看看