【C++ 记忆站】缺省参数

在这里插入图片描述


在这里插入图片描述

缺省参数的概念

缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时,如果没有指定实参则采用该形参的缺省值,否则使用指定的实参

正常调用一个函数

//正常调用一个函数,实参传递给形参
void func(int i)
{
    
    
	cout << i << endl;
}

int main()
{
    
    
	func(1);
	func(2);
	func(3);
}

加入缺省参数

缺省参数就相对一个备胎,实参没传值过来,那么形参就用缺省参数给的值
打印结果:
在这里插入图片描述

void func(int i = 0)
{
    
    
	cout << i << endl;
}

int main()
{
    
    
	func(1);
	func(2);
	func();
}

缺省参数的分类

1、全缺省参数

//全缺省参数
void func(int a = 10,int b =20,int c = 30)
{
    
    
	cout << a << endl;
	cout << b << endl;
	cout << c << endl;
}

int main()
{
    
    
	func();
	cout << endl;
	func(1);
	cout << endl;
	func(1,2);
	cout << endl;
	func(1, 2, 3);
	cout << endl;

	return 0;
}

打印结果:
在这里插入图片描述
注意千万不能这样写,这是c++语法不支持的
在这里插入图片描述


2、半缺省参数

//半缺省参数
void func(int a, int b = 20, int c = 30)
{
    
    
	cout << a << endl;
	cout << b << endl;
	cout << c << endl;
}

int main()
{
    
    
	cout << endl;
	func(1);
	cout << endl;
	func(1, 2);
	cout << endl;
	func(1, 2, 3);
	cout << endl;

	return 0;
}

打印结果
在这里插入图片描述
注意必须从左往右连续缺省
在这里插入图片描述
千万不能这样
在这里插入图片描述


缺省参数实际应用场景

举一个例子,利用 缺省参数 实现数据结构中的 栈(Stack) 初始化

之前用C语言来实现这个初始化是这样的

struct Stack
{
    
    
	int* a;
	int top;//栈顶
	int capacity;//栈的容量
};


void StackInit(struct Stack* ps)
{
    
    
	ps->a = NULL;

	//pst->top = -1;   // top 指向栈顶数据
	ps->top = 0;   // top 指向栈顶数据的下一个位置

	ps->capacity = 0;
}

这里的capacity(容量) 就直接初始化为0了,因为在之前栈实现是动态开辟容量空间的,当一个元素入栈,就会先检查空间是否足够,如果不够就再来增加容量,这种情况是当你不知道要入多少元素到栈里面去,你只能每次入栈前就先检查一下容量是否足够,如果不够往往容量空间是成倍数的增加的,当你不在需要入元素进栈就会产生一定的空间浪费


现在这种利用缺省参数的形式,在你确认需要入多少个元素的情况下直接把capacity定义为缺省参数,例如下面的方式:

struct Stack
{
    
    
	int* a;
	int top;//栈顶
	int capacity;//栈的容量
};

void StackInit(struct Stack* ps, int capacity = 4)
{
    
    
	ps->a = (int*)malloc(sizeof(int) * capacity);
	ps->top = 0;
	ps->capacity = capacity;
}

int main()
{
    
    
	struct Stack st;
	StackInit(&st, 100);
}

现在知道一定会插入100个数据,就可以显示传参数100,提前开好空间,避免空间扩容这个步骤,减少空间的浪费


在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/cdtu_mid/article/details/132348646