C++中函数值的传递方式为三种:值传递(Pass by value)、指针传递(Pass by pointer)、引用传递(Pass by reference)
void fun(char c) //---pass by value
void fun(char *str) //---pass by pointer
void fun(char &str) //---pass by reference
注:a.如果输入参数是以值传递的话,最好使用引用传递代替,因为引用传递省去了临时对象的构造和析构,可以减少耗费时间与空间;
b.函数的类型不能省略,就算没有也要加个void;
1.值传递:有一个形参向函数所属的栈拷贝数据的过程,如果值传递的对象是类对象或是大的结构体对象,将耗费一定的时间和空间。
2.指针传递:同样有一个形参向函数所属的栈拷贝数据的过程,但拷贝的数据是一个固定为4字节的地址。
3.引用传递:同样有上述的数据拷贝过程,但其是针对地址的,相当于为该数据所在的地址起了一个别名。
效率上讲,指针传递和引用传递比值传递效率高。一般主张使用引用传递,代码逻辑上更加紧凑、清晰。
引用传递做函数参数”是C++的特性,C语言不支持。
以下例子转自:https://www.cnblogs.com/ducongcong/p/6912164.html
值传递:
void fun(int x){
x += 5; //修改的只是y在栈中copy x,x只是y的一个副本,在内存中重新开辟的一块临时空间把y的值 送给了x;这样也增加了程序运行的时间,降低了程序的效率。
}
void main(void){
int y = 0;
fun(y);
cout<<\"y = \"<<y<<endl; //y = 0;
}
指针传递:
void fun(int *x){
*x += 5; //修改的是指针x指向的内存单元值
}
void main(void){
int y = 0;
fun(&y);
cout<<<<\"y = \"<<y<<endl; //y = 5;
}
引用传递:
void fun(int &x){
x += 5; //修改的是x引用的对象值 &x = y;
}
void main(void){
int y = 0;
fun(y);
cout<<<<\"y = \"<<y<<endl; //y = 5;
}