1.值传递
值传递的定义:
形参是实参的拷贝,改变形参的值并不会改变实参的值,从被调用函数的角度来看,值传递的方向是单向的,由实参传递到形参,参数的值只能传入不能传出。当函数的内部需要修改参数,并且不希望这个改变影响调用者时,采用值传递的方式,当传递的参数比较小时可以使用值传递的方式,但是值传递的方式的效率低于引用传递和指针传递的效率,引用传递的背后实际上就是指针,效率比较高。在进行传递参数时,优先判断能不能使用引用传递。
2.引用传递
引用传递的定义:
形参相当于实参的“别名”,对形参的操作实际上就是对。实参的操作,在引用传递的过程中,被调函数的形参虽然也作为局部变量在栈上面开辟了内存空间进行存放,但是这时存放的是由主调函数放进来的实参变量的地址。被调韩式对形参的任何形式的操作实际上都被处理成间接寻址,即通过栈中存放的地址访问主调函数中的实参变量。缺点就是被调函数对形参的操作会影响主调函数中的实参变量,所以在进行引用传递的时候要视情况在传入的引用变量的前面家const关键字进行修饰,否者编译器有可能会报错。采用引用传递可以避免全部数据全部压栈,可以提高程序的运行效率。
引用的简介:
引用就是某一目标变量的一个别名,对引用的操作和对目标变量的直接操作是一样的。
引用的声明方法:typeName &refrenceVariable=targetVariable
1:&在此不是求地址运算,而是起到一个标识的作用,表示定义一个目标变量的引用;
2:typeName是指目标变量的类型;
3:声明引用时,必须同时进行初始化;
4:引用定义完成,相当于目标变量有了两个名称;
int a=1;int &b=a; b=1等价于a=1;
引用和指针的区别:
引用和指针看起来很像,但与指针仍有一些不同点,主要分为以下几点:
1:由内存上讲,系统为指针分配内存空间,而引用与绑定的对象共享内存空间,系统不为引用变量分配内存空间
2:指针初始化以后可以更改指向的对象,而引用定义的时候必须要初始化,且初始化之后不能更改绑定的对象;
3:引用空间对象是直接操作,指针访问对象是间接;
4:如p是指针,*p就是引用;
补充:指针传递
指针传递的定义:
形参为指向实参地址的指针,当对形参的指向操作时,就相当于对实参本身进行操作。
指针传递和引用传递优劣势:
1:使用引用传递的参数在内存中并没有产生实参的副本,它是直接对实参进行操作;