06x函数50-55

admin 2025年2月4日13:58:03评论7 views字数 3667阅读12分13秒阅读模式

关注公众号,后台回复 找书+ C++Primer 获取C++相关电子书。

定义函数

C++ 中的函数定义的一般形式如下:

return_type function_name( parameter list ){   body of the function}

在 C++ 中,函数由一个函数头和一个函数主体组成。下面列出一个函数的所有组成部分:

  • 返回类型:一个函数可以返回一个值。return_type 是函数返回的值的数据类型。有些函数执行所需的操作而不返回值,在这种情况下,return_type 是关键字 void
  • 函数名称:这是函数的实际名称。函数名和参数列表一起构成了函数签名。
  • 参数:参数就像是占位符。当函数被调用时,您向参数传递一个值,这个值被称为实际参数。参数列表包括函数参数的类型、顺序、数量。参数是可选的,也就是说,函数可能不包含参数。
  • 函数主体:函数主体包含一组定义函数执行任务的语句。

每个 C++ 程序都至少有一个函数,即主函数main(),所有简单的程序都可以定义其他额外的函数。

调用函数

创建 C++ 函数时,会定义函数做什么,然后通过调用函数来完成已定义的任务。

当程序调用函数时,程序控制权会转移给被调用的函数。被调用的函数执行已定义的任务,当函数的返回语句被执行时,或到达函数的结束括号时,会把程序控制权交还给主程序。

调用函数时,传递所需参数,如果函数返回一个值,则可以存储返回值。

#include<stdio.h>// 函数声明intadd(int a, int b);// 函数定义intadd(int a, int b)// 函数头  形参 return a + b;}intmain(){int num1 = 5;int num2 = 3;int sum = add(num1, num2); // 调用函数 实参printf("The sum of %d and %d is %dn", num1, num2, sum);return0;}
06x函数50-55
image-20250203202911303

函数声明

函数可以声明多次,但是只能定义一次。声明必须在使用前,在main函数前,定义可以写在main后,或其他文件。

函数参数

如果函数要使用参数,则必须声明接受参数值的变量。这些变量称为函数的形式参数

形式参数就像函数内的其他局部变量,在进入函数时被创建,退出函数时被销毁。

当调用函数时,有三种向函数传递参数的方式:

调用类型
描述
传值调用
该方法把参数的实际值赋值给函数的形式参数。在这种情况下,修改函数内的形式参数对实际参数没有影响。
指针调用
该方法把参数的地址赋值给形式参数。在函数内,该地址用于访问调用中要用到的实际参数。这意味着,修改形式参数会影响实际参数。
引用调用
该方法把参数的引用赋值给形式参数。在函数内,该引用用于访问调用中要用到的实际参数。这意味着,修改形式参数会影响实际参数。

默认情况下,C++ 使用传值调用来传递参数。一般来说,这意味着函数内的代码不能改变用于调用函数的参数。之前提到的实例,调用 max() 函数时,使用了相同的方法。

值传递(pass by value)是指在函数调用时,将实参的值复制到形参中。这意味着在函数内部对形参的任何修改都不会影响到实参的值。num1和num2的值(即5和3)被复制到add函数的形参a和b中。函数内部对a和b的任何操作都不会改变num1和num2的值。函数返回计算结果a + b,这个结果被赋值给sum变量。 总结来说,num1和num2的值传递给了add函数的a和b,函数内部对a和b的操作不会影响到num1和num2。这就是值传递的基本概念。

#include<stdio.h>// 函数声明intadd(int a, int b);intmain(){int num1 = 5;int num2 = 3;// 输出调用add函数前的num1和num2的值printf("调用add函数前: num1 = %d, num2 = %dn", num1, num2);int sum = add(num1, num2);// 输出调用add函数后的num1和num2的值printf("调用add函数后: num1 = %d, num2 = %dn", num1, num2);printf("num1 和 num2 的和是 %dn", sum);return0;}// 函数定义intadd(int a, int b){// 输出add函数内部的a和b的值printf("在add函数内部: a = %d, b = %dn", a, b);// 交换a和b的值int temp = a;    a = b;    b = temp;// 输出交换后的a和b的值printf("交换后在add函数内部: a = %d, b = %dn", a, b);return a + b;}
06x函数50-55
image-20250203203646726

参数的默认值

当您定义一个函数,您可以为参数列表中后边的每一个参数指定默认值。当调用函数时,如果实际参数的值留空,则使用这个默认值。

这是通过在函数定义中使用赋值运算符来为参数赋值的。调用函数时,如果未传递参数的值,则会使用默认值,如果指定了值,则会忽略默认值,使用传递的值。

C++函数类型中,常见的四类函数类型及其特点如下:

  1. 有参有返(int*)这是返回值与参数类型同时有关的函数。这些函数在运行时会将输入的数据传递给目标函数,并根据数据类型返回相应的输出结果。
  2. 有参无返(void)这类函数没有明确的返回值,但通常指定了一个可以被编译为值的对象(例如char)。这类函数不需要从函数名中看出返回类型。
  3. 无参有返(int)这是只接受零个或多个参数,并在运行时将所有输入的数据传递给目标函数。这些函数的输出数据必须由程序执行者自定义,而不是通过编译器直接编出。
  4. 无参无返(void)这类函数通常指定了一个可以被编译为值的对象(例如char),但没有明确返回任何类型的数据。

Lambda 函数与表达式

C++11 提供了对匿名函数的支持,称为 Lambda 函数(也叫 Lambda 表达式)。

Lambda 表达式把函数看作对象。Lambda 表达式可以像对象一样使用,比如可以将它们赋给变量和作为参数传递,还可以像函数一样对其求值。

Lambda 表达式本质上与函数声明非常类似。Lambda 表达式具体形式如下:

[capture](parameters)->return-type{body}

函数的分文件编写

作用:让代码结构更加清晰 函数分文件编写一般有4个步骤

  1. 创建后缀名为.h的头文件
  2. 创建后缀名为.cpp的源文件
  3. 在头文件中写函数的声明
  4. 在源文件中写函数的定义

将之前的加法交换代码分成多个文件:头文件、源文件和主文件。以下是分文件后的代码结构:

  1. add.h - 头文件,包含函数声明。
  2. add.cpp - 源文件,包含函数定义。
  3. main.cpp - 主文件,包含 main 函数。
06x函数50-55
image-20250203234744307

main.cpp代码如下

#include<iostream>#include"add.h"intmain(){int num1 = 5;int num2 = 3;// 输出调用add函数前的num1和num2的值std::cout << "调用add函数前: num1 = " << num1 << ", num2 = " << num2 << std::endl;int sum = add(num1, num2);// 输出调用add函数后的num1和num2的值std::cout << "调用add函数后: num1 = " << num1 << ", num2 = " << num2 << std::endl;std::cout << "num1 和 num2 的和是 " << sum << std::endl;return0;}

add.cpp代码如下

#include<iostream>#include"add.h"// 函数定义intadd(int a, int b){// 输出add函数内部的a和b的值std::cout << "在add函数内部: a = " << a << ", b = " << b << std::endl;// 交换a和b的值int temp = a;    a = b;    b = temp; // 将a的值赋给b,将b的值赋给a    // 输出交换后的a和b的值std::cout << "交换后在add函数内部: a = " << a << ", b = " << b << std::endl;return a + b;}

add.h代码如下

#pragma once#ifndef ADD_H#define ADD_H// 函数声明intadd(int a, int b);#endif// ADD_H

🔔 想要获取更多网络安全与编程技术干货?

关注 泷羽Sec-静安 公众号,与你一起探索前沿技术,分享实用的学习资源与工具。我们专注于深入分析,拒绝浮躁,只做最实用的技术分享!💻

扫描下方二维码,马上加入我们,共同成长!🌟

👉 长按或扫描二维码关注公众号

06x函数50-55

或者直接回复文章中的关键词,获取更多技术资料与书单推荐!📚

原文始发于微信公众号(泷羽Sec-静安):06x函数50-55

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年2月4日13:58:03
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   06x函数50-55http://cn-sec.com/archives/3697167.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息