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)注意事项

  1. 缺省参数不能在声明和定义中同时出现,因为如果出现下面的这种情况,就产生了歧义了(这一点非常重要,很多人总是忘记)
//a.h
void Test(int a=10)
//a.c
void Test(int a=20)
  1. 缺省值必须是常量或全局变量
  2. 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++快速入门之缺省参数的主要内容,如果未能解决你的问题,请参考以下文章

C++快速入门(命名空间,输入输出,缺省函数,函数重载)

C++ 入门超详解!

C++ 入门超详解!

C++入门篇之关键字,命名空间,输入输出和函数重载

C++入门基础

C++入门(命名空间缺省参数函数重载引用内联函数)