指向数组的指针,2D数组和1d数组的差异

时间:2013-06-29 01:32:07

标签: c arrays pointers multidimensional-array

2D 数组说 int a [2] [3]

当我们调用该函数时,请说添加(a);

我们使用指向数组的指针接收它 void add(int(* p)[3])

BUT

1D 数组中说 int b [5]

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

我的问题是为什么我们不将b存储在指向数组ex的指针中 int(* p)[5] = b;

1 个答案:

答案 0 :(得分:1)

当用作值时,数组名称将衰减为等于指向其第一个元素的指针的值。这意味着:

int a[2][3];

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

int b[5];

名称b将衰减为&b[0],其类型为int *

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