太极1:函数重载、引用

26 篇文章 0 订阅

函数传参:传值、传地址、传引用
缺省参数:
概念:在声明/定义一个函数的时候,给函数的参数设置一个默认值,当用户对函数进行调用的时候,如果传递了实参,则使用实参,如果没有传递参数,则使用设置的默认值。
“类似备胎”

全缺省参数:所有函数都带默认值
半缺省参数:一部分参数带默认值(必须从右向左给!!!)

特性:
1.缺省参数必须从右向左给出
2.不能再函数声明和定义的位置同时给出
3.C语言不支持
---------------------------------分界线---------------------------------

函数重载:
1.概念:
相同的作用域,函数名字相同,参数列表不同(个数,类型,次序)
与函数返回值类型是否相同并无关系

2.调用原理:
预处理–>编译–>汇编–>链接—>可执行程序

预处理:预处理阶段将根据已放置在文件中的预处理指令来修改源文件的内容

编译:按照该种语言的语法规则对代码进行语法检查,将代码翻译汇编指令

汇编:将汇编指令码文件翻译成二进制格式的机器码文件

链接:将有关的目标文件彼此拼接+解决地址问题

调用原理:编译器在编译代码期间,需要对函数的实参类型进行推演,根据推演的结果选择对应合适类型的函数进行调用。
!!!有该函数存在,则直接调用,如果不存在类型完全匹配的函数,则编译器会尝试尽心隐式类型转换,转换完成后,如果有对应类型的函数,则进行调用,否则编译失败(没有对应类型/调用有二义性)

3.底层实现原理
C语言:在函数名字前面加
int Add(int left, int right)
{
return left + right;
}
C语言:_Add
C++: _Z3Addii
double Add(double left, double right)
{
return left + right;
}
C语言:_Add
C++:_Z3Adddd

char Add(char left, char right)
{
return left + right;
}
C语言:_Add
C++:_Z3Addcc

extern “C”:
告诉编译器:将代码按照C语言的风格进行处理
----------------------------------分界线--------------------------------
引用:
1.概念:
引用是一个别名, 编译器不会给引用变量重新分配空间,它和它引用的实体共用同一份内存空间
个人理解类似 typedef

2.特性:
引用变量在定义时必须要初始化
一个变量可以有多个引用(类似一个人可以有好几个别名)
引用变量一旦引用一个实体以后,就不能再去引用其他的实体

3.三种传参方式:
传值:
优点:可以对外部实参起到保护作用
缺点:不能通过形参改变外部实参,传参的效率低下,浪费空间

传地址:
优点:可以改变外部实参,不需要对实参进行拷贝,传参的效率高,节省空间
缺点:代码安全性不高,可读性较差

传引用:
可以改变外部实参,传参效率高,节省空间,代码可读性高

引用和指针在底层实现方式是完全相同的,引用是按照指针的方式来实现的。
1.引用必须初始化,指针可以不用
2.引用初始化引用一个实体后,就不能再引用其他实体,而指针可以在任何时候指向任何一个同类型的实体
3.没有NULL引用,可以有NULL指针
4.sizeof时,引用的结果为引用类型的大小,指针始终是地址空间所占的字节个数(比如32为下占4个字节)
5.有多级指针,比如二级指针。但是没有多级引用
6.引用比指针使用起来相对更安全
等等

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值