当函数的形参为数组时:
如果为一维数组,数组大小可以不写,数组名在形参中退化为指针
void foo(int a[])
{
}
以下指针赋值和函数调用:
</pre><pre name="code" class="cpp">int a[10];
p=a;
foo(p);
foo(a);
是合法的
如果为二维数组,第一维可以不写,
但第二维必须定义,数组名在形参中退化为指向二维数组的指针. 注意,
第二维的大小必须和指向的数组一致
void foo(int a[][10])
{
}
以下指针赋值和函数调用:
int (*p)[10];
int (*p1)[15];//数组大小不一致
int a[2][10];
p=a;
p1=a; //error
foo(p);
foo(p1);//error
foo(a);
如果为三维数组,第一维可以不写,但第二维,第三维必须定义【
多维数组以此类推】,数组名在形参中退化为指向三维数组的指针. 注意,第二维,第三维的大小必须和指向的数组一致
void foo(int a[][10][20])
{
}
以下指针赋值和函数调用:
int (*p)[10][20];
int (*p1)[10][21];//数组大小不一致
int a[3][10][20];
p=a;
p1=a; //error
foo(p);
foo(p1);//error
foo(a);
最后,数组大小的维度不一定在编译的时候确定,可以是动态计算的
比如以下函数的定义和调用都是合法的
void foo1(int n, int m)
{
int a[n][m];
}
总结,我的笔记比较水