二维数组&a,a,&a[0],a[0],&a[0][0],a[0][0]

它们的数据类型如下:

以a[2][3]举例

&a

int (*)[2][3]

a

int (*)[3]

&a[0]

int (*)[3]

a[0]

int *

&a[0][0]

int *

a[0][0]

int

&a中的a代表整个二维数组对象

二维数组名a是常量指针(指向常量地址的指针变量),指向a[0]这个一维数组

那么一维数组名a[0],指向a[0][0]这个int型数据

在做一些运算的时候,数组名总是和&数组名[0]等价,等价是指数值和类型均相等

如:

      a=&a[0]

      a[0]=&a[0][0](此时a[0]变成一维数组名)

那么,也就是说:

    n维数组a,数组名a指向a[0],a[0]是n-1维数组,数组名a[0]指向a[0][0],a[0][0]是n-2维数组,。。。。。。

根据上面说的来做指针的加减运算就比较清晰了。


另分析这种二维数组的写法:

int**a;

a = new int*[2];  

    //a为指针,指向具有2个int*数据的数组(即元素均为指针的数组)

for(int i=0;i<2;i++)

    *(a+i) = new int[3];

  //  分配2批动态空间(每批为3个int大小),并使上述数组元素指针指向它们。此时的a与2行3列的数组相似,

//也可通过a[i][j]的形式访问各元素。

它们的数据类型分析:

&a

int ***

a

int **

&a[0]

int **

a[0]

int *

&a[0][0]

int *

a[0][0]

int

此时a只是普通的双指针变量,取地址就多加一层指针,

a[i]=*(a+i),代表取a+i这个地址里的内容(int*)

a[i][j]=*(*(a+i)+j),代表取a+i这个地址里的内容(int*)+j,再去取 *(a+i)+j这个地址里的内容(int)   

同样满足 数组名总是和&数组名[0]等价

  • 32
    点赞
  • 84
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值