【问题标题】:pointer to an array, difference in 2D array and 1d array指向数组的指针,二维数组和一维数组的区别
【发布时间】:2013-06-29 01:32:07
【问题描述】:
我是一个 2D 数组说 int a[2][3]
当我们调用函数时说 add(a);
我们使用指向数组的指针接收它void add(int(*p)[3])
但是
在 1D 数组中说 int b[5]
我们将数组的地址存储在一个指向整数的简单指针中
int *p; p=b;
我的问题是为什么我们不将 b 存储在指向数组 ex int(*p)[5]=b;
的指针中
【问题讨论】:
标签:
c
arrays
pointers
multidimensional-array
【解决方案1】:
当用作值时,数组名称将衰减为等于指向其第一个元素的指针的值,具有该类型。这意味着:
int a[2][3];
名称a 将衰减为&a[0],其类型为int (*)[3]。但是,对于:
int b[5];
名称b 将衰减为&b[0],其类型为int *。
但是,&b 是指向b 的指针,这意味着它的类型为int (*)[5]。碰巧对于一个数组类型,它的地址将等于它的第一个元素的地址。但是,&b 的类型与 &b[0] 不同。