第七章 函数---C++的编程模块

本文深入探讨了C++中的函数,包括定义函数、函数参数传递方式、函数与数组的关系、C风格字符串的处理以及函数指针的使用。介绍了函数原型的作用,如确保编译器正确处理返回值和参数类型。特别强调了按值传递参数时形参与实参的区别,并讨论了在处理数组和C风格字符串时避免复制以提高效率的方法。同时,讲解了如何声明和使用函数指针,指出将指针参数声明为指向常量的重要性。
摘要由CSDN通过智能技术生成

7.1 定义函数

  • 可以将函数分成两类,没有返回值的函数和有返回值的函数,有返回值的函数,必须使用返回语句,以编将值返回给调用函数,值本身可以时常量,变量,也可以是表达式,只是其结果的类型必须为typeName类型或者可以被转换为typeName类型,通过函数将返回值复制到指定的CPU寄存器或内存单元中将其返回,随后,调用函数将查看该内存单元
  • 函数原型是一条语句,必须以分号结束,函数原型不要求提供变量名,函数原型的主要功能
    • 编译器正确处理函数返回值
    • 编译器检查使用的参数数目是否正确
    • 编译器检查使用的参数类型是否正确;如果不正确,则转换为正确的类型

7.2 函数参数和按值传递

  • C++通常按值传递参数,这意味着将数值参数传递给函数,而后者将其赋给一个新的变量
  • 【double volume = cube(side); double cube(double x)】被调用时,cube函数将创建一个新的名为x的double变量,并将其初始化为某值,因为cube()使用的是side的副本,而不是原来的数据。用来传递值的变量被称为形参,传递给函数的值被称为实参
  • 在函数调用时,计算机将为局部变量分配内存,在函数结束时,计算机将释放这些变量使用的内存

7.3 函数和数组

  • 在大多数情况下,C++和C语言一样,将数组名是为指针,C++将数组名解释为其第一个元素的地址
  • 传递常规变量时,函数将使用该变量的拷贝,但传递数组时,函数将使用原来的数组,将数组地址作为参数可以节省复制整个数组所需的时间和内存,如果数组很大,使用拷贝的系统开销将非常大,程序不仅需要更多的计算机内存,还需要花费时间来复制大块的数,另一方面,使用原始数据增加了破坏数据的风险
  • 将指针参数声明为指向常量数据的指针有两条理由
    • 这样可以避免由于无意间修改数据而导致的编程错误
    • 使用const使得函数能够处理const和非const实参,否则将只能接受非const数据,如果条件允许,则应将指针形参声明为指向const的指针

7.5 函数和C风格字符串【C风格字符串和常规char数据重要区别:字符串有内置的结束字符,意味着不必将字符串长度作为参数传递给函数,而函数可以使用循环依次检查字符串中的每个字符,直到遇到结尾的空值字符为止】

  • char数组
  • 用引号括起来的字符串常量
  • 被设置为字符串的地址的char指针

7.10 函数指针

  • 函数指针的基础知识

    • 获取函数的地址,如果think()是一个函数,则think就是该函数的地址,要将函数作为参数进行传递,必须传递函数名
    • 声明函数指针,函数指针声明应指定函数的返回类型以及函数的参数列表
      【double pam(int) —> double (*pf)(int)】由于pam是函数,因此(*pf)也是函数,pf就是函数指针, *pf(int)意味着pf()是一个返回指针的函数,而(*pf)(int)意味着pf是一个指向函数的指针
    • 使用指针来调用函数,使用(*pf)时,只需将它看作函数名即可
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值