分类: C/C++
2014-10-13 22:41:42
C语言中的数组参数为什么会退化为指针?
C语言中只会以值拷贝的方式传递参数,当向函数传递数组时
将整个数组拷贝一份传入函数(错的)
将数组名看做常量指针传输组首元素地址。(对的)
主要由于c语言以高效为最初设计目标,在函数传递时候如果拷贝整个数组执行效率将大大下降。
二维数组参数同样存在退化的问题?
二维数组可以看做是一维数组,二维数组中的每个元素是一维数组;
二维数组参数中的第一维的参数可以省略:
void f(int a[5]);
= = __ void f(int a[]);//退化为数组名
== __ void f(int* a);//相当于数组指针
void g(int a[3][3]);
== __ void g(int a[][3]);//退化为数组名
== __ void g(int (*a)[3]);//相当于数组指针
等价关系
注意!!
C中无法向一个函数传递任意的多维数组,为了提供正确的指针运算必须提供除第一维之外的所有维长度。限制:一维数值参数必须提供一个标示数组结束位置的长度信息(定义数组指针类型由数组大小还有元素类型共同决定),二维数组参数不能直接传递给参数(低效?),三维或更多维数组参数无法使用。
实例