2013-06-29 143 views
1

我一个2D阵列说INT一个[2] [3]指向数组的指针,在差2D阵列和1d阵列

当我们调用函数说添加(a)的

我们接收使用它的指针阵列空隙加载(INT(* P)[3])

BUT

1D阵列说INT B [5 ]

我们将数组的地址存储在一个简单的整数指针中 int * p;p = b;

我的问题是,我们为什么不在一个指针存储b键阵列前INT(* P)[5] = B;

回答

1

作为数值使用时的数组名称将衰减为与指向其第一个元素的指针相同的值,并使用该类型。这意味着:

int a[2][3]; 

名称a将衰减到&a[0],其具有类型int (*)[3]。但是,对于:

int b[5]; 

名称b将衰减到&b[0],它具有类型int *

但是,&b是指向b的指针,这意味着它的类型为int (*)[5]。恰巧对于一个数组类型,它的地址将与其第一个元素的地址相等。但是,&b&b[0]有不同的类型。