c语言中,如果实参个数少于形参个数,符合语法规范吗?,他的实数是怎么传递到形参的,

来源:百度知道 编辑:UC知道 时间:2024/05/22 06:57:24
函数调用:Msg(2)
Msg(3,f_f)
函数名 void Msg(int flg,float f)

不符合语法规范。在C语言中这是不会通过编译的,实参个数同形参必须一致,数据类型即使不一致也要符合强制类型转换的原则。在C++中,可以为形参设定默认值,这是实参数量不够的话,缺少的那些会被赋成默认值,C中没有此项用法。
C语言中的实参到形参是值传递的过程,即在开始调用一个函数时,动态分配空间给形参,然后将实参的值赋给形参,函数调用结束后,分配的临时空间会被放掉,而里面已经改变的值不会再写回实参所在的地址。
举个例子,main函数里你定义整型a=2,b=3,你在调用的函数里把a,b的值互换,调用结束后,你会发现a还是2,b还是3.
在C++中,加入了引用这么一个概念,实参到形参就由值传递变成了址传递,即调用时,它传递的是实参的物理地址,这样子在函数中对形参的值进行修改,函数调用结束后实参的值也会跟着改变。

实参与形参的个数应该相等,类型应相同或赋值能兼容。因为形参与实参按顺序对应,是一对一传递数据的。

c++中允许使用默认参数和函数重载,来实现相同函数名接收不同个数和类型的参数。
c语言中有可变参数,但是需要你在函数实现中实现可变参数,比如printf函数就是通过可变参数实现,可以接受个数可变的参数。
如果限制在c语言而不考虑c++的情况,那么要实现你所说的功能就必须用可变参数,关于可变参数,可以baidu看看。

如果f没设默认值的话,Msg(2)是无法通过编译的.

不合法。如果你实参数不够的话,那么你在定义函数里,肯定会运行时肯定会出现数据或者逻辑错误的