C++函数传参int a,int &a,const int &a的区别

# 传参方式                  作用
int a 值传递 无法改变a的值
int *a 地址传递 传入的是a是一个地址
int &a 引用传递 传入的是一个指向a的指针,可直接修改a的值
const int &a 不改变值的引用传递 提高传参效率,同时不允许修改a的值

1. int a 值传递

  • 无法改变原参数的值
  • 纯粹用来传入一个数值而已,计算机内部通过一次复制实现
//这个函数根本无法交换a,b的值
void Swap(int a, int b){int tmp = a;a = b;b = tmp;
}

2. int *a 地址传递

  • 传入的a是一个地址,因此可以修改原参数的值
  • 调用时要写成 f(&a) 的形式
//这个函数可以交换a,b的值
void Swap(int *a, int *b){int tmp = *a;*a = *b;*b = tmp;
}
Swap(&a,&b); //传入地址调用

3. int &a 引用传递

  • 传入函数的实际就是原参数,因此称作“引用传递”
  • 所以当然可以修改原参数的值
//这个函数可以交换a,b的值
void Swap(int &a, int &b){int tmp = a;a = b;b = tmp;
}
Swap(a,b); //直接调用

4. const int &a

  • 高效传递 + 不改变原参
  • 因为 int a 值传递的过程,计算机要做一次数值的复制,当数据特别大时,这必然造成了时间和资源的浪费,因此采用引用传递
  • 引用传递的同时避免对原参数造成修改,因此采用const避免这个问题

C++函数传参int a,int *a,int a,const int a的区别相关推荐

  1. x64汇编第三讲,64位调用约定与函数传参.

    目录 x64汇编第三讲,64位调用约定与函数传参. 一丶复习X86传参 二丶x64汇编 2.1汇编详解 x64汇编第三讲,64位调用约定与函数传参. 一丶复习X86传参 在x86下我们汇编的传参如下: ...

  2. C++知识点7——函数传参

    函数传参的原理和对象初始化的原理完全一致,用实参去初始化形参 函数传参的两种形式 1.按值传参 按值传参时,实参的拷贝用来初始化形参. int main(int argc, char const *a ...

  3. Python类三种方法,函数传参,类与实例变量

    1 Python的函数传递: 首先所有的变量都可以理解为内存中一个对象的'引用' a = 1 def func(a):a = 2 func(a) print(a) # 1a = 1 def fun(a ...

  4. 函数传参string_C/C++的三种函数传值方式及其区别

    C/C++函数传参方式我想很多朋友应该都知道,但是不同传参方式的背后他们的区别是什么我想很多人并不那么清楚.本文就给大家揭露一下各传参方式的区别. 传参方式有这三种:值传递.引用传递.指针传递 大家可 ...

  5. python装饰器函数传参

    python装饰器函数传参 装饰器 装饰器是一个返回函数的高阶函数. 装饰器常见用法: 打印日志 def logger(func):def wrapper(*args, **kw):print 'do ...

  6. 【小白学习C++ 教程】六、C++内置函数和函数传参

    @Author:Runsen 文章目录 内置函数 函数 传递参数 形式参数(指针传递) 函数是一组一起执行一个任务的语句.每个 C++ 程序都至少有一个函数,即主函数 main() ,所有简单的程序都 ...

  7. c++函数传参:值传递、指针传递、引用传递

    1.将变量名作为实参和形参: 这时传给形参的是变量的值,传递是单向的.如果在执行函数期间形参的值发生变化,并不传回实参.应为在调用函数时,形参和实参不是同一个存储单元. 2.传递变量的指针: 形参是指 ...

  8. linux system函数传参,Linux系统调用例程system_call和参数传递

    系统调用接口调用"int $Ox8O"指令进入内核并准各了相关参数后,剩下的工作就由系统调用例程来进行.Linux定义的系统调用 例程的入口为system_call.下面具体介绍s ...

  9. python如何次传参给线程_python如何给线程中的函数传参?

    1.Process说明 (1)概念 process模块是一个创建进程的模块,借助这个模块,就可以完成进程的创建. (2)语法([group [, target [, name [, args [, k ...

最新文章

  1. 云服务器 ECS 配置:阿里云ECS Windows Server 2012 搭建AD
  2. 阿里巴巴启动2017全球创客大赛 四大洲共设25个赛区
  3. Linux掛載samba
  4. centos平台openstack spice配置
  5. intellij存放插件的路径(转载)
  6. apk,task,进程区别
  7. 基于域名的apache服务器
  8. sharepoint 2007功能增强解决方案,资料收集
  9. RedHat系列软件管理(第二版) --二进制软件包管理
  10. 计算机网络基础笔记 运输层协议UDP/TCP
  11. 详谈Hibernate框架关系映射!
  12. 用php绘制空心圆,html5使用canvas画空心圆与实心圆_html5教程技巧
  13. 路径 @/ ~/ / ./ ../
  14. 毕业之后, 这些年薪50万+的90后程序员都经历了什么?
  15. “汇新杯”新兴科技+互联网创新大赛正式启动
  16. 雷军的博客分享- 这局棋,我站在人工智能这边
  17. Excel的官方网站
  18. Discarding record on action DISCARD on error 0
  19. macbook 终端命令怎么使用_苹果MAC系统怎么使用ping命令打开终端?
  20. sdoi2009 [动态规划 状态压缩DP] 学校食堂

热门文章

  1. Navicat安装及pj
  2. php 关键词挖掘,如何挖掘长尾关键词
  3. visual basic VB.NET实例系列教程第一节(简单实用抽奖程序)
  4. 笔记本突然没有WiFi了,网卡驱动带有感叹号,Intel(R) Wireless-AC 9462 #2 : 对本驱动程序而言,版本号错误。
  5. Ubuntu16.04安装系统监控器System Monitor
  6. FastDFS集群环境搭建(五)FastDFS监控器fdfs_monitor
  7. python网络爬虫快速下载4K高清壁纸
  8. 5个网站让你成为主宰网络世界的神秘黑客
  9. 使用JavaScript写一个简单的万年历(动态的电子时钟)
  10. 2022.3.1总结