函数参数的扩展(六)

  

,,,,,,,,在c++中可以在函数声明时。函数的默认值必须在函数声明中指定,那么在函数定义中是否可以出现参数的默认值呢当函数声明和定义中的参数默认值不同时会发生什么呢?我们通过实例代码进行分析

# include  & lt; stdio.h>      int  mul (int  x =, 0);      命令行参数个数,int 主要(int  char  * argv [])   {   ,,,printf (“mul (),=, % d \ n",, mul ());   ,,,printf (“mul (1),=, % d \ n",, mul (1));   ,,,printf (“mul (2),=, % d \ n",, mul (2));      ,,,return  0;   }      int  mul (int  x)   {   ,,,return  x  *, x;   }

,,,,,,,,我们看到在声明函数mul时,我们将参数默认声明为0,我们来看看这个程序可以编译成功吗?如果可以,在主要函数中会打印出什么?

函数参数的扩展(六)

,,,,,,,,我们发现它没有报的错,也就是说在c++中支持在函数声明时,支持参数默认值。那我们试试在C语言比那一起中是否也支持这样的写法呢?

函数参数的扩展(六)

,,,,,,,,我们看到这样的写法在C语言的编译器中是不支持的,那么我们试试在定义中给默认值,声明中不给呢,看g++编译器是否支持

函数参数的扩展(六)

,,,,,,,,我们看到它报错了,所以只能在声明时给参数默认值。

,,,,,,,,那么函数既然支持参数默认值,那它在多个参数设置时有没有规则呢?有两条规则:。

,,,,,,,,我们以代码为例进行分析

# include  & lt; stdio.h>      int 添加(int  x,, int  y =, 1, int  z =, 2);      命令行参数个数,int 主要(int  char  * argv [])   {   ,,,printf(“添加(1),=,% d \ n",,添加(1)),,,,,,,,,,,,,//4   ,,,printf(“添加(1,2),=,% d \ n",,添加(1,2)),,,,,,,,,//5   ,,,printf(“添加(1,,2,,3),=,% d \ n",,添加(1,,2,,3));//6      ,,,return  0;   }      int 添加(int  x,, int  y, int  z)   {   ,,,return  x  +, y  +, z;   }

,,,,,,,,我们分析下这个代码,默认参数y和z的值分别为1和2。那么主要函数中的返回值分别为1 + 1 + 2=4,1 + 2 + 2=5;1 + 2 + 3=6;我们来看看结果是否如此呢?

函数参数的扩展(六)

,,,,,,,,我们看到结果确实是如我们所分析的那样。那么我们试试只给y默认值,也就是说不遵循从右向左分配,看看会编译成功吗? 函数参数的扩展(六)

,,,,,,,,我们看到编译报错了,那么如果只想给y默认值该怎么做呢?只需把y 和z的位置换下就行,将它放在最右边。

,,,,,,,,下来我们来说说函数占位参数,。

,,,,,,,,我们以代码为例,看看函数占位参数是什么样的

# include  & lt; stdio.h>      int  func (int  x,, int);      命令行参数个数,int 主要(int  char  * argv [])   {   ,,,printf (“func (1, 2),=, % d \ n",, func (1, 2));      ,,,return  0;   }      int  func (int  x,, int)   {   ,,,return  x;   }

,,,,,,,,我们试试能否编译通过呢

函数参数的扩展(六)

,,,,,,,,我们看到编译是通过的,那么我们是不是觉得这是多此一举呢?明明只是个需要一个参数,却多了一个占位参数。下来我们就来讲下函数占位参数的意义,占位参数与默认参数结合起来使用,兼容C语言程序中可能出现的不规范写法。我们还记得之前那么空func()和空白func (void)等价这个问题嘛,在C语言中它是不等价的,因为第一个是代表可接受任意多的参数,而后一个是不接受参数。而在c++中它们两个表达的意思是一样的。

,,,,,,,,通过对函数占位参数的学习,总结如下:


,,,,,,,,

函数参数的扩展(六)