缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时,如果没有指定实参则采用该形参的缺省值,否则使用指定的实参。
.cpp
文件可以包含。若是将这些缺省参数放在放在了定义出,其他文件就没办法使用到了test.c
的源文件的,然后和上面一样为这里的函数形参给到缺省值,接着去编译的话就可以发现是会出现很多错误的,这其实就可以看出C语言是不支持【缺省参数】的因为对于缺省参数而言,虽然看上去很好理解,不过你真正去使用的话若是不注意会出现很多错误,了解了基本的概念和使用规则之后,接下去就让我们真正地去研究一下这个缺省参数
void func(int a = 10, int b = 20, int c = 30)
{
cout << "a = " << a << endl;
cout << "b = " << b << endl;
cout << "c = " << c << endl;
}
func(1, 2, 3);
func(1, 2);
func(1);
func();
来看一下运行结果。和我上面解释是一样的
func(, 1);
func(, 1, 2);
func(, ,1);
如果说全缺省参数比较好理解一些,那半缺省参数就够我们喝一壶了
【概念】:并不是所有的形参都有缺省值,可以缺省一个,也可以缺省多个
void Func(int a = 10, int b = 20, int c = 30)
例如像上面这种就是典型的半缺省参数
① 没有从右往左进行缺省
void func(int a = 10, int b = 20, int c)
void func(int a = 10, int b, int c)
void func(int a, int b = 20, int c)
② 没有连续地给出缺省值
void func(int a = 10, int b, int c = 30)
知道了怎样给缺省值是错误的之后我们来看看正确的半缺省参数应该如何给出
void func(int a, int b = 20, int c = 30) //✔ 后两个缺省
void func(int a, int b, int c = 30) //✔ 最后一个缺省
void func(int a, int b, int c) //✔ 全部不缺省(正常形参)
void func(int a = 10, int b = 20, int c = 30) //✔ 全部缺省【调用方式多】
通过了学习了半缺省参数,接下去我将带你通过实参传值,形参接收的形式,再度来辨析一下【半缺省参数】的难点究竟在哪里
void func(int a, int b = 20, int c = 30)
func(1, 2, 3); //a = 1 b = 2 c = 3
func(1, 2); //a = 1 b = 2 c = 30
func(1); //a = 1 b = 20 c = 30
func(); //a = ? b = 20 c = 30
void func(int a, int b, int c = 30)
func(1, 2, 3); //a = 1 b = 2 c = 3
func(1, 2); //a = 1 b = 2 c = 30
func(1); //a = 1 b = ? c = 30
func(); //a = ? b = ? c = 30
void func(int a, int b, int c)
func(1, 2, 3); //a = 1 b = 2 c = 3
func(1, 2); //a = 1 b = 2 c = ?
func(1); //a = 1 b = ? c = ?
func(); //a = ? b = ? c = ?
如果你认真自己地看下来,就会觉得大吃一惊,原来缺省参数还有这么多细节是被忽略的,那了解到这些之后可以带来什么实际的意义呢?
struct Stack {
int* a;
int top;
int Capacity;
};
void InitStack(struct Stack* st)
{
st->a = (int*)malloc(sizeof(int) * 4);
st->top = 0;
st->Capacity = 4;
}
struct Stack st;
InitStack(&st);
上面这种其实就是因为一开始初始化给到的栈容量太大或者太小导致的,若是我们在提前知道当前数据量的情况下可以手动给出栈的容量时,就不会导致这种情况了,此时就可以使用到我们本文所学习的【缺省参数】了
defaultCapacity
默认容量这个参数,然后为其设置一个缺省参数为4void InitStack(struct Stack* st, int defaultCapacity = 4)
{
st->a = (int*)malloc(sizeof(int) * defaultCapacity);
st->top = 0;
st->Capacity = defaultCapacity;
}
struct Stack st;
InitStack(&st, 100);
struct Stack st2;
InitStack(&st2);
这就是有关缺省参数实际应用的案例,当然不止这一个,我只是举个例子,在C++中有很多地方都会使用到这个【缺省参数】,比方说还有六大成员函数之一的构造函数若是你对其语法非常熟悉的话,用起来就会非常得顺手
最后我们来总结一下本文所学习的内容
以上就是本文要介绍的所有内容,感谢您的阅读