我定义了一个三个有默认值参数的函数
int demo1(int a, int b, int c);
int demo1(int a = 1, int b = 2, int c = 3){
return a+b+c;
};
当我尝试调用并传入两个参数的时候显示编译报错,并且我发现当我不传参数,只传一个,全参调用都没有问题,唯独传入两个的时候会编译报错
demo1();
demo1(1);
demo1(4,3); //唯独这行编译报错
demo1(6,6,6);
这个是什么原因导致的呢?
而且当我把函数所需的参数提高到4个后
demo1();
demo1(1);
demo1(4,3); //编译报错
demo1(6,6,6); //编译报错
demo1(6,6,6,6);
十分不理解,难道对于有默认值的函数,只能是要么全使用要么是只能传入第一个实参吗?
报错信息看一下呢?按说应该只有提供3个参数的会报错,不知道到底匹配哪一个。
你把第3行demo1(4,3)删除的话,就没有报错了?
报错拿出来看看
C语言中的嵌套结构体表示在一个结构体中可以使用另一个结构作为成员。在C语言中定义结构体嵌套有两种方法:
独立结构
我们可以创建2个结构体,但在主结构中应该使用依赖其它结构体作为成员。我们来看看嵌套结构体的代码。
struct Date
{
int dd;
int mm;
int yyyy;
};
struct Employee
{
int id;
char name[20];
struct Date doj; // 嵌套一个结构体:Date,用于存储日期
}emp1;
如上所见,doj
(加入日期)是Date
类型的变量。 这里doj
用作为Employee
结构体中的成员。通过这样的方式,我们可以在其他结构体中使用Date
结构。
我们可以在结构体内定义结构体,它比第一种方式需要更少的代码。但它不能用于其它结构中。
struct Employee
{
int id;
char name[20];
struct Date
{
int dd;
int mm;
int yyyy;
}doj;
}emp1;
我们可以通过Outer_Structure.Nested_Structure.member
访问嵌套结构的成员,如下所示:
e1.doj.dd
e1.doj.mm
e1.doj.yyyy
C
我们来看看C语言中嵌套结构体的一个简单例子。创建一个源代码文件:nested-structure.c,其代码如下
#include <stdio.h>
#include <string.h>
struct Employee
{
int id;
char name[20];
struct Date
{
int dd;
int mm;
int yyyy;
}doj;
}e1;
int main()
{
//storing employee information
e1.id = 1001;
strcpy(e1.name, "Maxsu");//copying string into char array
e1.doj.dd = 12;
e1.doj.mm = 11;
e1.doj.yyyy = 2018;
//printing first employee information
printf("employee id : %d\n", e1.id);
printf("employee name : %s\n", e1.name);
printf("employee date of joining (dd/mm/yyyy) : %d/%d/%d\n", e1.doj.dd, e1.doj.mm, e1.doj.yyyy);
return 0;
}
执行上面示例代码,得到以下结果 -
employee id : 1001
employee name : Maxsu
employee date of joining (dd/mm/yyyy) : 12/11/2018
答案:
问题解答:
在 C++ 中,默认参数必须从右往左依次设定,默认参数的右侧可以有无限参数,但一旦其中有一个参数设定了默认值,这个参数右侧的所有参数都必须有默认值。建议使用函数重载:
#include <iostream>
using namespace std;
int func(int a, int b, int c)
{
cout << "a=" << a << endl;
cout << "b=" << b << endl;
cout << "c=" << c << endl;
return 0;
}
int func(int a, int b)
{
int c = 2; // 定义默认参数
cout << "a=" << a << endl;
cout << "b=" << b << endl;
cout << "c=" << c << endl;
return 0;
}
int main()
{
func(1, 2); // 输出1, 2, 2
func(1, 2, 3); //输出1, 2, 3
return 0;
}
具体实现可以下面的代码:
#include <iostream>
using namespace std;
int func(int a, int b, int c, int d)
{
cout << "4个参数" << endl;
return 0;
}
int func(int a, int b, int c)
{
cout << "3个参数" << endl;
return 0;
}
int func(int a, int b)
{
cout << "2个参数" << endl;
return 0;
}
int main()
{
func(1, 2); //调用2个参数的函数
func(1, 2, 3); //调用3个参数的函数
func(1, 2, 3, 4); //调用4个参数的函数
return 0;
}