多维数组指针和函数形参

当函数的形参为数组时:

如果为一维数组,数组大小可以不写,数组名在形参中退化为指针
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];
}


总结,我的笔记比较水



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值