C++传递参数的方式有哪几种
一个函数的基本结构是:
返回值类型 函数名(形式参数){
函数体
}
尤其是形式参数,返回值一般只有一个,但是形参可能有多个甚至多种形式。总的来说,参数传递有两种方法,一种是直接传值,一种是传地址。其中,传地址又分为传指针、传引用类型、传数组名三种,也就是说参数传递有四种方法。
传值方式
传值方式算是比较常见的方法,简单直观,但是缺点也很明显,通过一个例子就可以看出来
#include <iostream>
using namespace std;
void swap(int a,int b){
int temp;
temp = a;
a = b;
b = temp;
}
int main(){
int m,n;
cin>>m>>n;
cout<<"brfore:";
cout<<"m="<<m<<" n="<<n<<endl;
swap(m,n);
cout<<"after:";
cout<<"m="<<m<<" n="<<n<<endl;
}
一个简单的交换函数,得到的结果为
执行完函数之后,并没有交换值
传地址
传指针
传指针,就是把相应变量的指针带入到函数中执行
#include <iostream> using namespace std; void swap(int *a,int *b){ int temp; temp = *a; *a = *b; *b = temp; } int main(){ int m,n,*pm,*pn; cin>>m>>n; pm = &m; pn = &n;//指针分别指向m和n cout<<"brfore:"; cout<<"m="<<m<<" n="<<n<<endl; swap(pm,pn); cout<<"after:"; cout<<"m="<<m<<" n="<<n<<endl; }
得到的结果是
实现的交换操作
传引用类型
引用类型是C++特有的,在C语言中没有,也可以实现函数操作
#include <iostream> using namespace std; void swap(int &a,int &b){ int temp; temp = a; a = b; b = temp; } int main(){ int m,n; cin>>m>>n; cout<<"brfore:"; cout<<"m="<<m<<" n="<<n<<endl; swap(m,n); cout<<"after:"; cout<<"m="<<m<<" n="<<n<<endl; }
传数组名
#include <iostream> #include <string.h> using namespace std; void sub(char b[]) { b[10]="world"; } int main() { char a[10]="hello"; sub(a); cout<<a<<endl; }
可以看出,虽然传地址的方法有很多种,但是都可以实现操作值的目标。这一点直接传值是无法做到的。一般用的最多的两种方式就是传值和传指针。
所以这就不难解释,在数据结构中,求长度,取值等操作一般会传值,但是对于删除和增加等操作,就必须采用传地址的方法。这样相当于起到了一个返回值的作用,返回的数据是已经修改过的数据。

浙公网安备 33010602011771号