求解?形参C不是已经默认值了吗?为何结果不是9?

#include<iostream>
using namespace std;
int max(int a,int b,int c=9)
{if (b>a)a=b;
if(c>a)a=c;
return a;
}
int main()
{int a=7,b=8,c;
cout<<max(a,b,c)<<endl;
return 0;
}

int max(int a,int b,int c=9)
这种形式给的值是在编译后的值,但是当它被调用时参数(即cout<<max(a,b,c)<<endl这一句中的c值)才是子函数max处理的值。也就是说调用时的参数覆盖了初始化的参数。
做以下修改就成了默认值了:
int max(int a,int b,int c)
{
c=9;
if (b>a)a=b;
if(c>a)a=c;
return a;
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-03-30
数据没初始化,c里面是有数据的,一个随机数…

求解?形参C不是已经默认值了吗?为何结果不是9?
这种形式给的值是在编译后的值,但是当它被调用时参数(即cout<<max(a,b,c)<<endl这一句中的c值)才是子函数max处理的值。也就是说调用时的参数覆盖了初始化的参数。做以下修改就成了默认值了:int max(int a,int b,int c){ c=9;if (b>a)a=b;if(c>a)a=c;return a;} ...

C语言函数形参初始值?
int b=0指的是默认参数,调用时传入或不传入b都行,如果不传入b的话,那么b的值就是0。另外注意只有最后面的参数可以是默认参数。

默认实参不在形参列表的结尾,应该怎么修改?
如果这样调用fun(1,2)那么就是a=1,b=2,c=3,这里c没有指定,因为c是默认实参,已经有了默认值,这里c就是采用默认值3。\\x0d\\x0a为什么默认实参必须是函数参数表中最右边的参数。把上面的函数改下\\x0d\\x0aintfun(inta=3,intb,intc)\\x0d\\x0a{}\\x0d\\x0a这样调用fun(1,2),这样...

c语言中,形参可以是常量,变量或表达式,这句话为什么是错的?形参不是...
说好的是形参。不是实参。实参就是对的。我觉得楼主可能没有了解什么是形参。当然。这个可以不用去理解也不影响代码质量的。但是。理论就是这么说的。最好看懂。形参只能是变量,在被定义的函数中,必须指定形参的类型。没有确定的值 形参变量在未出现函数调用时,并不占用内存,只在调用时才占用。调用...

C语言一道题
答案是 C 这个是考察关于函数传入参数的默认值的知识点。ABD选项的声明形式都是对的,声明的时候参数可以只指定类型,不指定变量名和默认值。而C选项,第2个参数有默认值,第一个参数没有默认值,这是错误的。改成DC(int = 5,int) 就是对的,一楼说的是错的。 在参数列表里 int =5 并不...

如果一个函数中有多个默认参数,则默认参数必须全部处在形参表的?
2. 如果默认参数不是在后面部分,而是在前面的话,编译器就会报错,譬如:void f(int a, int b=0, int c);这样的话,默认参数是没有任何意义的,因为你写f(1,2)的时候,编译器是把1赋值给a,2赋值给b,结果c没有赋值,故出错。总结:为了避免出现上述的第2种情况,编译器只要检查到...

C语言的一道单选题,求解?
C选项:在被调用函数中,不需要考虑形参数组的大小。因为传数组都是只传一个地址过来,而如果函数的参数是指针类型变量,在调用该函数的过程中,传给函数的是实参的地址,在函数体内部使用的也是实参的地址,即使用的就是实参本身。所以在函数体内部可以改变实参的值。本选项说是不考虑形参数组的大小是对...

c语言中,为什么函数调用不允许出现在形参中?不是有递归调用吗??
因为形参表中每一项用来接收一个值,而函数调用不能作为“左值”,即不能被赋值,所以是错的。

在C++中,函数参数默认值为什么不允许为局部变量呢??
形参值就是默认值,默认值必须是系统能确切找得到的值才能进行对带有默认值形参进行初始化,而局部变量不是在正在被调用的函数内定义的(形参是函数一开始就定义的)或者在其他函数内定义并被使用完就被释放掉了,因此系统就会找不到一个确切的值赋给形参,所以函数参数默认值不允许为局部变量。

C语言中形参可以是常量这句话对吗?
问题中提到的是行参不是实参,行参只能是变量,在被定义的函数中,必须指定行参的类型实参可以是常量,变量,表达式,函数等

相似回答
大家正在搜