为什么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])
等价关系:
去方框,变*号,放在a前面。
注意事项:
一维数组参数:必须提供一个标示数组结束位置的长度信息;
C语言中无法向一个函数传递任意的多维数组;
int func(int a[3] [3])
{
}
int a[2][2];
func(a); //error
传递与访问二维数组的方式:
#include <stdio.h>
#include <malloc.h>
void access(int (*a)[3], int row)
{
int col = sizeof(*a) / sizeof(int);
int i = 0;
int j = 0;
printf("sizeof(a) = %d\n", sizeof(a));
for(i=0; i<row; i++)
{
for(j=0; j<col; j++){
printf("%d\n", a[i][j]);
}
}
}
int main()
{
int a[3][3] = {{0,1,2}, {3,4,5}, {6,7,8} };
access(a,3);
}