赞
踩
java只有值传递: java是按值调用(值传递)还是按引用调用(引用调用)
而C++有三种:
注意:每次调用一个函数,都会重新建立一个形参(类似于临时变量),传入的实参作为初始化值拷贝给形参 ,一旦实参的值拷贝给形参后,形参和实参其实是两个不同的对象了
实参和形参都是变量名
这是传给形参的是变量的值,传递是单向的。如果执行函数期间函数形参数值发生变化,不回传给实参,因为在调用函数时候形参和实参不是同一个存储单元。
调用时,将实参的值传递对应的形参,即为值传递。
由于形参有自己独立的存储空间,又作为函数的局部变量使用,因此在函数中对任何形参值得修改都不会改变实参变量的值。
当函数内部需要修改参数,并且不希望这个改变影响调用者时,采用值传递。
void swap(int ,int );
int main() {
int a =1,b=2;
swap(a,b);
cout<< a<<b; // 输出1 2
}
void swap(int i,int j) {
int temp;
temp = i;
i = j;
j = temp;
}
函数的调用过程:函数Swap被调用前,实参a和b有自己的存储空间,并且有自己的初始值。当调用函数Swap时,为形参(即函数的参数)i和j分配存储空间,并将a和b的值复制过来,函数执行过程中,将i和k的值进行交换,当函数执行结束之后,x和y所占用的存储空间将被释放,这种传递的方式,并不会对实参a和b的值产生影响,此即为值传递。
实参是变量地址,形参是指针变量
调用时候把a和b的地址传送给形参i和j(它们是指针变量),因此*a和i为同一内存单元,*b和j为同一内存单元
这种虚实结合的方法本质也是值传递,只是传递的值是变量的地址。
可以改变指针指向的内容,不能改变指针指向
通过形参指针变量访问主函数中的变量a和b,并改变他们的值,这样就能得到正确的结果,但在概念上兜了一个圈子,并不是那么直截了当
形参为指向实参地址的指针,当对形参的指向操作时,就相当于对实参本身进行的操作
void swap(int *,int *);
int main() {
int a =1,b=2;
swap(&a,&b);
cout<< a<<b;
}
void swap(int *i,int *j) {
int temp;
temp = *i;
*i = *j;
*j = temp;
}
实参是变量名,形参是引用变量
传递的是变量的别名
虚实结合的时候将实参a的地址传递给形参j,让形参i的地址取实参a的地址,从而让a和i共享同一单元,简单来说:把变量a的名字传给引用变量i,让i成为a的别名
引用传递是一种特殊的变量,它被认为是一个变量的别名。当定义一个引用时,其实是为目标变量起一个别名,引用并不分配独立的内存空间,它与目标变量公用其内存空间,当定义一个引用时,如果该引用不是用作函数的参数或者返回值,则必须提供该引用的初始值(即必须提供引用的目标变量名)
说明:使用引用参数可以直接操作实参变量,从而能够实现通过修改形参的值而达到修改对应实参值得目的。当引用作为函数形参,其引用的目标变量为人为调用该函数时对应的实参变量名,所以,在定义函数时,对于引用类型参数不必提供引用的初始值。
void swap(int &,int &);
int main() {
int a =1,b=2;
swap(a,b);
cout<< a<<b; // 输出2 1
}
void swap(int &i,int &j) {
int temp;
temp = i;
i = j;
j = temp;
}
当函数未调用之前,实参a和b的值分别为1和2。当函数调用过程中,形参的值被交换,即a=2,b=1;函数调用结束之后,实参的值被改变。即函数调用时,作为形参的引用变量并不分配新的内存空间,它将作为实参变量的别名与其共用内存。
引用的规则:
(1)引用被创建的同时必须被初始化(指针则可以在任何时候被初始化)。
(2)不能有NULL引用,引用必须与合法的存储单元关联(指针则可以是NULL)。
(3)一旦引用被初始化,就不能改变引用的关系(指针则可以随时改变所指的对象)。
1.形参不必声明为指针变量
2.实参不必使用变量地址(在变量名前加&)
其它:
首先要搞清楚指针和引用区别。引用只是相当于一个变量的别名而已,并不是一个具体的对象,在内存中并不会分配空间。而指针是具体一个对象,声明一个对象时会在内存中为指针也分配空间。当普通变量作为形参传值时,只是将该变量的值传给函数,在函数内部不管如何变化都不会改变改变量的值。但是当引用传值时,在函数内部如果对形参做改变的话就会对该变量做改变,此时的形参相当于该变量的一个别名,对这个别名做出的改变就相当于对该变量做出改变。当指针作为形参向函数传值的时候是传的改变量的地址,所以在函数内部对该地址的内容做出改变就相当于对该变量的改变。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。