• C++:函数的概述


    在C++中,函数是用来执行特定任务或操作的独立的代码块。函数有助于将程序分解为较小的、可维护的部分,提高了代码的可读性、可重用性和模块性。下面是定义和使用C++函数的一般步骤以及基本语法:

    函数的作用:

    函数用于封装一组相关的操作,通过函数的名称来调用这些操作。函数的作用包括但不限于:

    1. 执行特定的计算或操作。
    2. 使代码更加模块化和易于理解。
    3. 实现代码的重用。
    4. 提高代码的可维护性和可读性。
    5. 允许参数传递,使函数更通用和灵活。

    定义函数的五个步骤:

    以下是定义C++函数的一般步骤:

    1. 函数声明(可选): 在使用函数之前,通常需要提供函数的声明,以告诉编译器函数的名称、返回类型和参数列表。声明可以放在函数的调用之前或使用头文件。例如:

      int add(int a, int b); // 函数声明
      

    2. 函数定义: 在程序的某个位置,定义函数的实际代码块。函数定义包括函数的返回类型、函数名称、参数列表和函数体。例如:

      1. int add(int a, int b) {
      2. return a + b; // 函数体
      3. }

    3. 函数调用: 在程序中的任何地方,可以使用函数的名称和参数列表来调用函数,执行函数的代码块,并获取结果(如果有返回值)。例如:

      int result = add(5, 3); // 调用函数
      

    4. 传递参数: 在函数调用时,将参数传递给函数。参数可以是零个或多个,根据函数的定义。参数的值在函数内部使用。例如:

      int result = add(5, 3); // 5和3是参数
      

    5. 返回值: 函数可以返回一个值,这个值可以在函数调用后使用。返回值的类型与函数的返回类型相匹配。例如:

      1. int add(int a, int b) {
      2. return a + b; // 返回值为a和b的和
      3. }

    函数的基本语法格式: 

    • 返回类型:指定函数返回的数据类型(如int、double、void等)。
    • 函数名称:函数的标识符,用于调用函数。
    • 参数列表:指定函数接受的参数,可以是零个或多个参数,每个参数包括类型和名称。
    • 函数体:包含函数执行的实际代码块。
    • return语句(可选):用于返回一个值,并终止函数的执行。如果函数的返回类型是void,则可以省略return语句。

    Cpp函数的值传递问题简述:

    C++中的函数参数传递方式包括值传递(pass by value)、引用传递(pass by reference)和指针传递(pass by pointer)等方式。在这里,我们简述一下值传递方式。

    值传递(Pass by Value):

    值传递是一种函数参数传递方式,其中函数的形参(参数)接收实际参数(传入的参数)的值副本,而不是直接引用实际参数本身。这意味着在函数内部对形参的修改不会影响到实际参数的值。

    以下是值传递的特点和注意事项:

    • 形参接收实际参数的值副本。
    • 对形参的任何修改不会影响到实际参数。
    • 值传递适用于不希望函数修改实际参数的情况。
    • 值传递的操作会复制实际参数的值,可能会导致性能开销,尤其在处理大型数据结构时。

    下面是一个示例,展示了值传递的情况:

    1. #include
    2. void modifyValue(int x) {
    3. x = x * 2; // 修改形参x的值
    4. }
    5. int main() {
    6. int num = 5;
    7. modifyValue(num);
    8. std::cout << "Value after function call: " << num << std::endl;
    9. return 0;
    10. }

    在这个示例中,modifyValue 函数接收一个整数参数 x,并在函数内部将其值加倍。然而,当我们在 main 函数中调用 modifyValue 时,实际参数 num 的值没有被修改,因为函数参数是通过值传递方式传递的,只有 x 的副本被修改。

    引用传递和指针传递是两种不同的函数参数传递方式,它们允许函数访问和修改实际参数的内存位置,与值传递方式相比更具有灵活性和功能。下面分别讲解引用传递和指针传递方式:

    引用传递(Pass by Reference):

    在引用传递中,函数的形参是对实际参数的引用。这意味着函数参数不是实际参数的副本,而是直接引用了实际参数的内存地址。因此,对形参的修改会影响到实际参数的值。

    1. void functionName(Type& parameterName) {
    2. // 函数体
    3. }
    1. #include
    2. void modifyValue(int& x) {
    3. x = x * 2; // 修改引用参数x的值,也会修改实际参数
    4. }
    5. int main() {
    6. int num = 5;
    7. modifyValue(num);
    8. std::cout << "Value after function call: " << num << std::endl;
    9. return 0;
    10. }

    在上述示例中,modifyValue 函数接受一个整数引用 x,并在函数内部将其值加倍。当我们在 main 函数中调用 modifyValue 时,实际参数 num 的值也被修改,因为 x 是对 num 的引用。

    指针传递(Pass by Pointer):

    在指针传递中,函数的形参是一个指针,该指针存储了实际参数的内存地址。通过在函数内部解引用指针,可以访问和修改实际参数的值。

    语法:
    1. void functionName(Type* parameterName) {
    2. // 函数体
    3. }
    1. #include
    2. void modifyValue(int* ptr) {
    3. *ptr = (*ptr) * 2; // 通过指针修改实际参数的值
    4. }
    5. int main() {
    6. int num = 5;
    7. modifyValue(&num); // 将实际参数的地址传递给函数
    8. std::cout << "Value after function call: " << num << std::endl;
    9. return 0;
    10. }

    在上述示例中,modifyValue 函数接受一个整数指针 ptr,并在函数内部通过指针修改了实际参数 num 的值。在函数调用时,我们需要将 num 的地址传递给函数,即使用 &num

    区别:

    引用传递(Pass by Reference):

    1. 语法:使用引用作为函数参数。函数声明和定义中的参数类型是引用(例如,Type& parameterName)。

    2. 操作符:在函数内部,使用变量名(引用参数名)直接操作实际参数。

    3. 空指针:不会引发空指针异常,因为引用始终引用一个有效的对象。

    4. 可选性:引用传递通常不允许在函数内部重新绑定(修改)引用,因为引用一旦与某个对象绑定,就不能更改为引用另一个对象。

    指针传递(Pass by Pointer):

    1. 语法:使用指针作为函数参数。函数声明和定义中的参数类型是指针(例如,Type* parameterName)。

    2. 操作符:在函数内部,使用指针解引用操作符*来访问实际参数的值

    3. 空指针:需要谨慎处理指针可能为空的情况,否则可能导致空指针异常

    4. 可选性:可以在函数内部重新分配指针,将其指向不同的对象

    总结:

    • 引用传递更接近于对实际参数的别名,更容易理解和使用,但不允许在函数内部重新绑定引用。

    • 指针传递提供了更多的灵活性,允许在函数内部重新分配指针,但需要更小心处理指针可能为空的情况。(具体后续学习过程中再深度理解)

  • 相关阅读:
    飞行堡垒系列_键盘灯开关
    C++入门学习笔记
    java计算机毕业设计基于安卓Android的掌上酒店预订APP
    58欧氏空间05——实对称矩阵的正交相似对角化
    【Retinex theory】【图像增强】-笔记
    外卖好评回复模板
    2021春招Java面试题大全(精华)
    【Luogu P1450】[HAOI2008] 硬币购物(dp,容斥)
    javascript 进阶教程(02)
    高并发时代到底是Go还是Java?
  • 原文地址:https://blog.csdn.net/m0_74331272/article/details/133308623