前记:
stage 1:最开始以为数组和指针是可以等价的,(int a[4],*b=a; 用a[1]和b[1]访问的是同一个元素)。因此就自然而然地以为高维数组等价于高级指针
stage 2:开始听到说数组与指针的区别,区别之一在于数组名是不可更改的,即上述的a更像一个const point(指针常量),可以修改所指向的值但不能修改自己的值。
stage 3:碰到新问题:将多维数组名作为参数传递到形参为多维指针的函数时,无法编译通过。简单查了下说数组的退化,没深究
stage 4:(now) 看了几遍c++ primer,趁下午有空总结了各种情况,结合文中提到的内容,总算理清了数组与指针的关系。
几个例子:
1.int a[4]; a[2]为int型,a为int *
2.int a[4][5]; a[2]类型为int[5],a类型为int (*)[5] ——指向数组的指针,数组包含5个int
3。 2中, &a[2] 的类型与a的类型一致
4. 换句话说,[]操作符是先对指针进行加法操作,再解引用
正文:
关键:
1. 不取地址时,数组名表示指向数组第一个元素的const指针(from c++ primer)
2.取地址时,数组名的结果为数组的指针。
总结:
有多维数组int a[x0][x1]...[xn],则a[a0][a1]...[am]的类型为 int (*)[xm+2]...[xn]
规律: inta[x0][x1][x2]...[xm][xm+1][xm+2]...[xm]
类型为int ( * )[xm+2]...[xm]