在C++中能够在函数的形参表中赋值吗?

在殷人昆的数据结构书里看到在顺序表类里有这样的语句:
const int defaultSize = 100;
...
SeqList(int sz = defaultSize);
...
能够直接这样在形参表里边赋值吗?效果是什么?是在调用函数的时候直接将这个位置的形参替换成所赋的值吗?

可以


在函数声明或定义时,直接对参数赋值,该参数就是默认参数。在函数调用时,省略部分或全部参数,这时就会使用默认参数进行代替。

使用方法:

(1)在函数声明或定义时,直接对参数赋值,该参数就是默认参数。

(2)在函数调用时,省略部分或全部参数,这时就会使用默认参数进行代替。


注意事项:

(1)一般在声明函数是设置默认参数。

如果在函数声明和定义函数时都设置了默认参数,则以函数声明的默认参数为准。

复制代码 代码如下:

#include<iostream>

using namespace std;

int main()

{

 double add(double a=3.2,double b=9.6);//在函数声明时设置默认参数

 cout<<add()<<endl;         //使用默认参数

 return 0;

}

double add(double a=3.2,double b=9.5)//在定义函数时设置默认参数

{

 return a+b;

}


运行结果:

(2)默认参数的定义顺序是自右向左。

即如果设置了一个缺省值,其右边的参数也应该设定一个缺省值。

即:

复制代码 代码如下:

<pre name="code" class="cpp">int add(int a,int b=1,int c=1);</pre>  


(3)默认参数的调用顺序是自左向右。

在使用函数的时候,实参必须是由左自右书写的。


复制代码 代码如下:

/*正确的用法*/

add(1,2,3);//传递三个参数的值

add(1,2);//传递两个参数的值

add(1);//传递一个参数的值

add();//不传递参数的值

/*错误的用法*/

add(,2,3);//不能省略掉左边的参数的值,应该右左向右传值

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-01-23
这个就是默认参数的使用,比如:
int fun(int a,int b = 5)
{
....
}
那么调用的时候可以写成 fun(2),这时就等价于fun(2,5);
如果你调用时写成fun(2,7);此时形参b就是7,如果不写就会使用你的默认值。
要注意,默认值只能是靠右边的形参,可以有多个形参都提供默认值,但是他们必须都在右边,并且是常量。
如:
int fun(int a = 2,int b);这样就是错的,因为默认形参没有放在右边追问

我不太理解你说的“必须是常量”
比如说我在调用上面的函数的时候写成
SeqList(a[3])
其中a[3]本身不是const,但是已经赋过值,这样可以吗?

追答

我看错了,以为你说的是3,如果只是个赋过值数组,那就不行了

本回答被提问者采纳
第2个回答  2013-01-23
是设置sz的默认值为defaultSize,在调用这个函数时,若没有传参,则sz的值为defaultSize,否则为传参的值,我想应该是这个意思
第3个回答  2013-01-23
这个是默认参数,必须是个常量。

在C++中能够在函数的形参表中赋值吗?
可以 在函数声明或定义时,直接对参数赋值,该参数就是默认参数。在函数调用时,省略部分或全部参数,这时就会使用默认参数进行代替。使用方法:(1)在函数声明或定义时,直接对参数赋值,该参数就是默认参数。(2)在函数调用时,省略部分或全部参数,这时就会使用默认参数进行代替。注意事项:(1)一般在...

函数名中的参数为什么不付值
函数名中的参数称为形参,形参可以不赋值,在C++中形参也可以赋值,此时赋值为初始化,如果调用函数时未对参数赋值就取初始化的值

在c++中,什么是形参,什么是实参。有何区别吗
形参出现在函数定义中,在整个函数体内都可以使用, 离开该函数则不能使用。实参出现在主调函数中,进入被调函数后,实参变量也不能使用。 形参和实参的功能是作数据传送。发生函数调用时, 主调函数把实参的值传送给被调函数的形参从而实现主调函数向被调函数的数据传送。1.形参变量只有在被调用时才分...

C语言和C++的区别
在c++中,定义或声明函数时,可在形参中给它赋一个初始值作为默认参数值,如:int FUN(int a = 10);,表示未传参调用时,自动给a赋值10。然而,在c89标准下,这种操作不可行,会引发错误。在c语言中,系统在调用函数时开辟函数栈帧,传入实参时通过mov指令将值传入寄存器,再通过push指令压入栈中...

为什么c++赋值要这样
众所周知C语言的函数参数是值传递,也就是传递给函数形参的仅仅是形参的值,如果直接将a、b的值传递给scanf的形参,在函数内部修改这些形参的值是无法影响到外部的实参a和b的,也就无法起到给ab赋值的作用。所以,scanf不能这么设计,而是必须传递指向实参的指针作为参数,通过指针去引用和修改外部实参的...

c++中引用做形参为什么不能直接传常数给它
引用做形参,本质上是要传地址,而且形参允许被修改,传个常数进去,常数不允许被修改,肯定编译器不允许。如果满意,欢迎采纳,谢谢 如有疑问,欢迎追问

C++中,为什么形参和实参个数要相同?形参不能被反复被调用吗
调用函数的时候,程序将实参的值赋值给形参,从而使得函数中的数据处理能够进行,如果实参个数和形参不等,则会导致数据无法传递,形参的值不能确定,从而函数无法正常运行!所谓的形参和实参个数相同是指每次调用的时候,实参的个数和形参是相同的!而不是从整个程序中来看!对于函数来说,一般在程序运行...

C++ 函数形参里的const char作为返回值问题
形参是char *类型,实参是cons chart *类型时,编译程序会给出错误信息,意思是被调函数可以改变串的内容,而实参又是const类型,这样的实参不允许改变,二者之间不能融合,即使函数不改变形参的内容也不行。但形参是const char *,实参是 char *是可行的,当要返回形参指针时,其返回类型必须是const ...

C++函数指针中的形参表作用是什么
形参表又叫“函数签名”。函数签名的作用就是标识一个独立函数的身份,即:就像一个人的身份证号。函数是可以重载的:即同名函数。通过用不同的形参数量,或者显示地定义不可隐式转换形参类型去确定你将要调用的函数。简单点说,形参表的作用就是使编译器能够在众多的重载函数中找到正确的,需要调用的...

c++中函数实参和形参的区别有哪些?
代码在编译时会出现 error C2664: 'InsertSort' : cannot convert parameter 1 from 'int' to 'int []'这是因为用数组名做函数实参时,向形参(数组名或指针变量)传递的是数组首元素地址,因此对参数的类型做一下改变,如下图所示:

相似回答