zoukankan      html  css  js  c++  java
  • 二维数组与二级指针

    Fun (int **p){}这里面的int **p //这里的p不是二维数组的指针,而是指向指针的指针,即二级指针。

    正确的二维数组的指针应该是:Int a[2][2];Int (*p)[2];//定义时无论数组维数,只可忽略第一维

    例如:int a[2][2]={0,1,2,3};

    int **p=(int**)a;//强制将二维数组指针转为指向指针的指针

    则此时p[0]=0;p[1]=1;p[2]=2;p[3]=3;

    而p[0][0]=*(*(p+0)+0)=**p;

    p[0][1]=*(*(p+0)+1);

    对于p[0][0]:由于*p=0; ====> **p=*(0);引用地址为零的内存,必然是错误的。

    对于p[0][1]=*(*p+1)====>*(4),引用了非法内存同样,

    对于p[1][0]=*(1),p[1][1]=*(5),均引用了非法内存所以说,二位数组并不能简单的转换成指向指针的指针。

    二维数组其实只是一个指针,而二级指针是指向指针的指针,所以二者并不等价。如上例所示:int a[2][2];

    a是指向整个数组的首地址,并不是int **;所以不要指望向函数fun里面传实参 p=a;

  • 相关阅读:
    2-分类
    1-确定变量间是否有关系—显著性检验
    git简单操作
    Hadoop HA和Hbase HA
    Docker入门操作
    内存数据库专题(MemCached 和Redis)
    Spark MLlib和Sprk GraphX
    Spark 调优
    Spark Streaming基础
    Spark SQL
  • 原文地址:https://www.cnblogs.com/la0bei/p/3594803.html
Copyright © 2011-2022 走看看