函数中参数的传递的几种方式与区别

其大致可以分为传递参数,传递地址,传递数组,传递引用类型

首先我们根据传递的方式可以分为两大类,传入数值和传入地址两种;
在这里插入图片描述
在这里插入图片描述

1 传递数值

在函数的使用中,我们传递参数,一般常见的这种类型,其传入过程中,仅仅传入数值,对原实参无影响;

//传入形参
void swap(float m,float n)
{
    float temp;
    temp=m;
    m=n;
    n=temp;
}

2. 传递地址即操作指针变量(C语言的指针操作)

我们知道操作指针意味着对原存储单元地址进行操作,因此在传入指针变量的函数的处理中,会导致原来实参发生变化,例如下面的方式:

//传入地址,对地址上的内容进行交换
void swap1(int32_t *m,int32_t *n)
{
    int32_t temp;
    temp=*m;       //取出地址m的内容
    *m=*n;        //将另一个地址的内容传递给地址m的位置
    *n=temp;     //完成交换
}
//传入地址,对地址进行交换
void swap2(int32_t *m,int32_t *n)
{
    int32_t *temp;
    temp=m;
    m=n;
    n=temp;
}

以上的两种方式均是传入指针操作地址。第一个对地址的内容进行交换第二个交换两个地址。

3.传递数组

在函数参数的传入中,我们还经常可以看到类似一传入数组的操作,其本质是传入了数组的首位地址,因此在内部对数组操作也会导致原来的实参发生改变;

//传入数组
void sub(char b[])
{
   
  b[1]='a';
}

4. 传递引用类型是C++ 中的一种参数传入的方式

传递引用类型:本质为指针的引用,也是c++对C语言的一个重要的扩冲,引用变量实际上就是操作原变量)在这里插入图片描述
操作实例:

//传入引用类型作为参数
void swap3(int32_t &m,int32_t &n)
{
    int32_t temp;
    temp=m;
    m=n;
    n=temp;
}


全部代码

#include<iostream>
#include<string>

//传入形参
void swap(float m,float n)
{
    float temp;
    temp=m;
    m=n;
    n=temp;
}
//传入地址,对地址上的内容进行交换
void swap1(int32_t *m,int32_t *n)
{
    int32_t temp;
    temp=*m;       //取出地址m的内容
    *m=*n;        //将另一个地址的内容传递给地址m的位置
    *n=temp;     //完成交换
}
//传入地址,对地址进行交换
void swap2(int32_t *m,int32_t *n)
{
    int32_t *temp;
    temp=m;
    m=n;
    n=temp;
}
//传入数组
void sub(char b[])
{
   
  b[1]='a';
}
//传入引用类型作为参数
void swap3(int32_t &m,int32_t &n)
{
    int32_t temp;
    temp=m;
    m=n;
    n=temp;
}


int main(int argc, char const *argv[])
{	 char name[10]="hello";	
	std::cout << "Please enter 变量";


	std::int32_t a,b;
	std::cin >> a>>b;
    swap(a,b);       //交换形参 实参不变
	
	std::cout << "Hello,look a and b swap: " << a<<"and"<<b<< std::endl;
    int32_t *p1,*p2;
    p1=&a;
    p2=&b;
    swap1(p1,p2);   //交换地址的内容
    std::cout << "Hello,look a and b swap: " << a<<"and"<<b<< std::endl;
    swap2(p1,p2);   //交换地址
    std::cout << "Hello,look a and b swap: " << a<<"and"<<b<< std::endl;
    sub(name);
    std::cout << "Hello,look name: " <<name<<std::endl;
    int32_t aa=1;
    int32_t bb=2;
	swap3(aa,bb);   //C++引用交换位置
    std::cout << "Hello,look a and b swap: " << a<<"and"<<b<< std::endl;
	return 0;
}

操作结果:
在这里插入图片描述

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值