c++在函数声明的时候可以提供一个默认值,必须只能在函数声明中指定
#include <stdio.h>
int a(int x=1); //此处为函数声明,可以在这里给函数提供一个默认值
//如果int x未赋一个初始值,a()调用的时候一定要有参数
int main()
{
printf("a()=%d",a()); //a()未提供参数值,默认x=1
}
int a(int x) //此处为 函数定义 不能在此处给函数提供默认值
{
return x*x;
}
/*这样子声明也可以*/
#include <stdio.h>
int a(int x=1) //将函数a()放在主函数之前可以直接在定义时给参数赋初值
{ //放在main韩式之前就相当于声明???现在在这个位置到底是声明还是定义???等我找到答案在来更改
return x*x;
}
int main()
{
printf("a()=%d",a()); //a()未提供参数值,默认x=1
}
占位参数
在C++中可以为函数提供占位参数
占位参数只有参数类型声明,而没有参数名声明
int a(int x,int) //int为占位符
{
return x;
}
int main()
{
a(1);//错误占位符未赋值
}
函数参数默认值赋值
从最右到左
#include <stdio.h>
int add(int x=1,int y=1,int z=1);
/*参数有初始值的话必须 从最右边到左 连续的几个参数都有赋值*/
/*
int add(int x,int y=1,int z=1); //正确
int add(int x=1,int y,int z=1); //错误,赋值必须 从右到左连续赋值,不能中间间隔一个未赋值
int add(int x=1,int y=1,int z); //错误,赋值必须 从最右到左连续赋值
*/
int main()
{
printf("a=%d\n",add()); //a未提供参数值,默认1+1+1
printf("a=%d\n",add(2)); //2+1+1 未赋值的参数默认使用 初始值
printf("a=%d\n",add(2,2)); //2+2+1
return 0;
}
int add(int x,int y,int z)
{
return x+y+z;
}
/*有讲到的内容备忘下*/
void add() 和 void add(void)
C:两者是不等价的add()可以有无数的参数 add(void)没有参数
C++:两者是等价的 占位符就是为了兼容c中add()可以有无限参数而设计出来的