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;
}

 

可以看出,虽然传地址的方法有很多种,但是都可以实现操作值的目标。这一点直接传值是无法做到的。一般用的最多的两种方式就是传值和传指针。

所以这就不难解释,在数据结构中,求长度,取值等操作一般会传值,但是对于删除和增加等操作,就必须采用传地址的方法。这样相当于起到了一个返回值的作用,返回的数据是已经修改过的数据。

posted @ 2021-09-11 22:38  fallwinddy  阅读(506)  评论(0)    收藏  举报