[C/C++和指针]深度解析---指针与数组 (二)

2014-11-24 10:28:07 · 作者: · 浏览: 4
;
所以说这里的a和&a绝对不是同一个东西,虽然本质上他们的地址值是一样的,但是他们的类型不一样。就决定他们代表不同的意义。
那么刚刚说了对于下面的例子:
int a[2][3];
int (*p)[2][3]=&a;
我们可以定义这样的一个变量p来接受&a的值。
那么我们要接受a应该定义一个什么样的变量呢。a[2][3]是一个二维数组,可以看成是这样的a是一个数组,具有两个元素,分别为a[0],a[1]其中这两个元素的值a[0],a[1]他们的值又是一个具有3个元素的数组。此时我们可以将a[0],a[1]看成是数组名,那么a[0][0]就是数组a[0]的第0个元素了。对应关系如下:a[0] ----> a[0][0],a[0][1],a[0][2] a[1] ----> a[1][0],a[1][1],a[1][2] 那么a到底是什么,其实a数组有两个元素,a[0],a[1],那么a的值自然就是其第一个元素的地址了,也就是&a[0]了。这是一个什么类型? 我们知道如果我们将a[0]看成一个整体,例如我们用A来代替a[0],那么A[0],A[1]就相当于a[0][0],a[0][1] 。 此时A就是一个int类型的数组,&A,的类型实际上就是int(*p)[3]这个类型。 所以下面的代码也是正确的:
int a[2][3]; int(*p)[3]=a; //所以对于你的问题,可以这样子