在殷人昆的数据结构书里看到在顺序表类里有这样的语句:
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);//ä¸è½çç¥æ左边çåæ°çå¼ï¼åºè¯¥å³å·¦åå³ä¼ å¼
我不太理解你说的“必须是常量”
比如说我在调用上面的函数的时候写成
SeqList(a[3])
其中a[3]本身不是const,但是已经赋过值,这样可以吗?
我看错了,以为你说的是3,如果只是个赋过值数组,那就不行了
本回答被提问者采纳在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 []'这是因为用数组名做函数实参时,向形参(数组名或指针变量)传递的是数组首元素地址,因此对参数的类型做一下改变,如下图所示: