2-3:C++快速入门之缺省参数
Posted 快乐江湖
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2-3:C++快速入门之缺省参数相关的知识,希望对你有一定的参考价值。
情境导入
有一个函数,作用是初始化数组的大小,由于不知道具体要申请多少空间,我们的常见操作是——初始化时先随便申请一定的空间,后序需要时进行增容。
void ArrayInit(int* a)
{
a=(int*)malloc(sizeof(int)*8);//由于不知道具体存储多少个,暂时定为8个
}
int main()
{
int* a=NULL;
ArrayInit(a);
}
所以这样的做法有点“无奈”,但是缺省参数可以(C语言不支持)解决这个问题
(1)缺省参数的概念
简单点说:缺省参数是指声明或定义函数时给函数指定一个参数,且这个参数具有一个默认值,如果进行调用时传入相应位置的实参,则形参采用实参的值,如果不传入实参,那么形参就会采用默认设定的那个值。
(2)缺省参数的分类
A:全缺省参数
全缺省参数就是所有形参都被设置了默认值
如果设置为全缺省参数,从左向右,传入对应位置实参的形参采用实参的值,没有传入的采用默认值。
B:半缺省参数
简单说:形参列表(从左向右)只能有“非默认-非默认-默认”这样的情况,不能出现“非默认-默认-非默认”或者“默认-非默认”等情况
设置为半缺省参数后,对应位置依次必须传入对应的实参。
(3)注意事项
- 缺省参数不能在声明和定义中同时出现,因为如果出现下面的这种情况,就产生了歧义了(这一点非常重要,很多人总是忘记)
//a.h
void Test(int a=10)
//a.c
void Test(int a=20)
- 缺省值必须是常量或全局变量
- C语言不支持
所以在开头提到那个问题,在缺省参数的帮助下就可以解决了。也就说,默认设置一个参数,如果不知道具体数组要申请多大,那么就用默认值,然后后序动态增长即可,如果知道空间一定最大是某个值,那么就传入参数,将其固定为某个大小。
void ArrayInit(int* a,Seeting_number=8)
{
a=(int*)malloc(sizeof(int)*Seeting_number);
}
int main()
{
int* a=NULL;
ArrayInit(a);//默认申请8个
ArrayInit(a,100);//直接申请100个
}
以上是关于2-3:C++快速入门之缺省参数的主要内容,如果未能解决你的问题,请参考以下文章