C++学习日记 | Lecture 6 函数基础

资料来源:南科大 余仕琪 C/C++ Program Design

LINK:

  1. CPP/week06 at main · ShiqiYu/CPP · GitHub
  2. 6.2-function-parameters_哔哩哔哩_bilibili
  3. 6.3-references_哔哩哔哩_bilibili
  4. 6.5-inline-function_哔哩哔哩_bilibili

0 概述

        本节课主要介绍函数的基础内容。包括:函数参数(按值传递)、数组和指针参数、C 语言样式数组字符串、struct 参数(复制数据或地址)、引用和常量、内联函数(为什么是内联?与宏的比较)。

        LAB 6 主要内容为测试整数参数、指针参数和引用参数的示例。

LINK:C++学习日记 | LAB 6 static library 静态库-CSDN博客

1 Functions 函数

        本小节介绍函数的基本知识,略。

Function Parameters 函数的参数

        参数传递有两种方式:pass by value值传递,pass by reference引用传递

  • 基础值传递

  • 指针传递

通过指针传递

         通过指针传递的实质其实和之前的基本方法是一致的本质只是将地址传入了函数内,并在函数内对地址所指向的内容进行修改。

  • 结构体传递

         结构体在函数的传递过程中,首先是由主函数初始化matA结构体,接着在执行函数matrix_max()的过程中新建了一个结构体mat,并拷贝matA的数据进行操作

        所以以上操作过程无疑会存在以下问题

 3 References 引用

  • “&” 放在一类变量类型的后面,表示后面的这个是引用
  • 引用使得存在“一个人有两个名字”

  • 与指针相比,引用更为安全。因为指针存在越界风险,引用则是一个确定的对象

         因此,回到函数调用结构体传递存在的问题,可以采用两种方法:使用指针以及使用引用

         使用指针时候注意指针的越界风险:如是否对指针+1,是否没有初始化等等

        另一种方法是使用引用。引用没有越界的风险,只不过注意如果matrix_max()对mat进行了修改,那么主函数送入的结构体变量也会被修改,因为它们是同一个东西。

        如果在函数变量前加上了const,那么就不会被修改。

如果有很多东西需要return: 

Return statement 返回

        略。

5 Inline functions 内联函数

        函数调用需要堆栈操作和跳转。对于一些经常被调用的微小函数来说,这是一个沉重的代价。

        inline可以一定程度解决上述问题

  • inline相当于把函数搬到了程序调用处,避免了执行过程反复调用程序
  • inline只能建议编译器采用此方法优化,意味着具体情况下编译器不一定如此优化

 lnline和宏

  • 看起来宏有很多好处:①在编译前的预处理中直接替换了对应部位的代码,不存在反复调用函数的问题; ②lnline只能返回float类型数据,而宏并不受此限制
  • 但是宏存在一些问题:宏只是对文本的搬运,如果宏的输入涉及各类运算后,可能会存在一些潜在的风险,并且在出错后难以察觉原因。因此,宏虽然很方便,但是也很危险,C++中并不鼓励使用宏。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

电子异术家

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值