⑴ 若需要利用形参直接访问实参时,应将形参变量说明为( )参数。
若需要利用形参直接访问实参时,应将形参变量说明为引用参数。
形参是指定义函数时括号里的那个变量。实参是指在主函数中调用某个函数时,作为参数的那个变量。在进行参数传递时,引用参数是利用形参直接访问实参,形参的变化可以直接传递给引用参数的任何实参,影响实参的变化,因为程序操作的是真正的变量,而不是它的副本。
(1)通过什么对象访问实参扩展阅读:
在形参表中以符号“&”开始的参数即为引用参数。参数是引用时,函数接收的是实参的左值而不是值的拷贝。这意味着函数知道实参在内存中的位置,因而能够改变它的值或取它的地址。如果引用参数不希望在被调用的函数内部被修改,可以把参数声明为 const 型的引用。
引用参数必须被初始化为指向一个对象,一旦初始化了,它就不能再指向其他对象。允许在有效地实现重载操作符的同时,还能保证用法的直观性。
⑵ Java中的形参和实参的区别以及传值调用和传
1.形参:用来接收调用该方法时传递的参数。只有在被调用的时候才分配内存空间,一旦调用结束,就释放内存空间。因此仅仅在方法内有效。
2.实参:传递给被调用方法的值,预先创建并赋予确定值。
3.传值调用:传值调用中传递的参数为基本数据类型,参数视为形参。
4.传引用调用:传引用调用中,如果传递的参数是引用数据类型,参数视为实参。在调用的过程中,将实参的地址传递给了形参,形参上的改变都发生在实参上。
案例分析:
1.基础数据类型(传值调用)
传值,方法不会改变实参的值。
2.引用数据类型(引用调用)
传引用,方法体内改变形参引用,不会改变实参的引用,但有可能改变实参对象的属性值。
举两个例子:
(1)方法体内改变形参引用,但不会改变实参引用 ,实参值不变。
publicclassTestFun2{
publicstaticvoidtestStr(Stringstr){
str="hello";//型参指向字符串“hello”
}
publicstaticvoidmain(String[]args){
Strings="1";
TestFun2.testStr(s);
System.out.println("s="+s);//实参s引用没变,值也不变
}
}
publicclassTestFun4{
(StringBuffersb){
sb.append("java");//改变了实参的内容
}
publicstaticvoidmain(String[]args){
StringBuffersb=newStringBuffer("my");
newTestFun4().testStringBuffer(sb);
System.out.println("sb="+sb.toString());//内容变化了
}
}
执行结果打印:s=1
(2)方法体内,通过引用改变了实际参数对象的内容,注意是“内容”,引用还是不变的。
执行结果,打印:sb=my java 。
所以比较参数是String和StringBuffer 的两个例子就会理解什么是“改变实参对象内容”了。
总结:
1.java的基本数据类型是传值调用,对象引用类型是传引用。
2.当传值调用时,改变的是形参的值,并没有改变实参的值,实参的值可以传递给形参,但是,这个传递是单向的,形参不能传递回实参。
3.当引用调用时,如果参数是对象,无论对对象做了何种操作,都不会改变实参对象的引用,但是如果改变了对象的内容,就会改变实参对象的内容。
⑶ 为什么c++中类的成员函数参数有时候是类的引用而有时候是类名求教!!感谢
引用是什么?引用就是对象的另一个名字。通过使用引用形参,函数可以直接访问实参对象,而无须赋值它。
来看一个简单的例子。
Class A;
void A::(const A& a); 那么这里就a就是传递给a实参(假设为b)的别名。调用形式如aa.(b)。而如果函数声明为void A::(A a),程序需要在函数执行的时候重新构造一个临时对象a(使用A的复制构造函数)。这样会带来效率和空间上的损失。如果A这个类禁止了复制构造函数的使用 ,那么该调用会是错误的。
再来看看引用带来的其它好处:
1. 使用引用形参可以返回额外信息。 函数只能有一个返回值,那么需要返回多个内容的时候怎么办?可以使用引用形参来传递变量进行修改从而达成我们的目的。
2. 利用const引用避免复制。来看一个简单的例子:
bool isShorter(const string &s1, const string &s2) { return s1.size() < s2.size(); }
因为在程序中不需要修改实参的值,所以加上const可以避免复制,在函数体内任意对s1,s2进行修改的操作都是违法的。这样使用可以保证我们无意的修改实参,而这并非我们的本意。
3. 应该讲不需要修改的引用形参定义为const引用。普通的非const引用形参在使用时不太灵活。这样的形参既不能用const对象初始化,也不能使用字面值或产生右值的表达式实参初始化。
说了这么多,如有错误,请指出。希望能学好引用,写出效率更高更通用的代码。
⑷ 在C语言中,函数实参与形参之间的数据传递方式是( )传递方式。
函数实参与形参之间的数据传递方式是( 值传递)传递方式,在C语言中,数据传递方式有值传递和引用传递,值传递:传值,实际是把实参的值赋值给行参,相当于。
那么对行参的修改,不会影响实参的值 。引用传递: 实际是传值的一种特殊方式,只是他传递的是地址,不是普通的赋值,那么传地址以后,实参和行参都指向同一个对象,因此对形参的修改会影响到实参。
(4)通过什么对象访问实参扩展阅读
传值调用中,只使用了实参的值。传值调用机制里,形参是一个局部变量,其初始值为相应实参的值。在引用调用机制里,将实参的地址传递给形参,从表面上看是以实参变量取代形参,因此任何发生在形参上的改变实际上都发生在实参变量上。
引用传递是将变量的内存地址传递给方法,方法操作变量时会找到保存在该地址的变量,对其进行操作。会对原变量造成影响。可以将一个变量通过引用传递给函数,这样该函数就可以修改其参数的值。
⑸ 在java中,什么是形参什么是实参,它们都是什么类型的,它们之间的传递关系什么样的
形参:全称为“形式参数”是在定义函数名和函数体的时候使用的参数,目的是用来接收调用该函数时传递的参数。
形参的作用是实现主调函数与被调函数之间的联系,通常将函数所处理的数据,影响函数功能的因素或者函数处理的结果作为形参。没有形参的函数在形参表的位置应该写void.main 函数也可以有形参和返回值,其形参也称为命令行参数,由操作系统在启动程序时初始化,其返回值传递给操作系统。
实参:可以是常量、变量、表达式、函数等, 无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值, 以便把这些值传送给形参。 因此应预先用赋值,输入等办法使实参获得确定值。
实参和形参的区别:
空白或占位符
1。函数的形参列于函数声明中,在函数定义的函数体内使用。当函数调用时,形参(任何种类的)是一类将被填充的空白或是占位符。
用来填充形参
2。实参是用来填充形参的。当函数被调用时,实参列在函数名后面的括号里。执行函数调用时,实参被传递给形参。
传值调用和引用调用
3。传值调用和引用调用指的是用于参数传递过程中的一种机制。传值调用中,只使用了实参的值。传值调用机制里,形参是一个局部变量,其初始值为相应实参的值。在引用调用机制里,将实参的地址传递给形参,从表面上看是以实参变量取代形参,因此任何发生在形参上的改变实际上都发生在实参变量上。
⑹ C语言定义函数的时候为什么有时候加上&。比如: Status EnQueue(LinkQueue &Q, QElemType e){ ...}
这是引用形参!
使用引用形参一般有两种情况,一时需要在程序中修改参数的值,而是参数内存较大,用以节省空间与时间的花销。
第一种:
要想改变实参的值可以使用引用,因为引用类型的形参实际上就是实参的别名,当然能对实参进行操作了。当然你也可以通过指针来改变相应实参的值,但是使用引用会更加安全,更自然。
第二种:
在向函数传递大对象时,需要使用引用形参。虽然赋值实参对于内置数据类型的对象或者规模较小的类型来说没有什么问题,但是对于大部分的类型或者大型数组,它的效率就比较低了。另外,某些类型是无法复制的。使用引用形参,函数可以直接访问实参对象,而无须复制它。如果使用引用形参的唯一目的是为了复制形参,则需要使用const类型的。之所以使用引用是为了提高效率,使用const是为了避免函数修改实参的值。这样既达到了非引用类型的效果,又避免了非引用类型的缺点。
引用是很重要的知识点,还望少年能搞懂啊!
⑺ 形参与实参的区别
有以下区别:
1、主体不同:实参在调用有参函数时,函数名后面括号中的参数为“实际参数”。形参不是实际存在变量,又称虚拟变量。
2、目的不同:实参可以是常量、变量或表达式,无论实参是何种类型的量,在进行函数调用时,都必须具有确定的值,以便把这些值传送给形参。
需要注意当形参和实参不是指针类型时,在该函数运行时,形参和实参是不同的变量,他们在内存中位于不同的位置,形参将实参的内容复制一份,在该函数运行结束的时候形参被释放,而实参内容不会改变。