C++函数基础

2023-11-09

一:函数的定义和使用

1.函数的定义:

类型说明符 函数名(含类型说明的形参表)

{

        语句序列

}

如:

int GetSum(int a, int b)
{
    return a + b;
}

2.形式参数:

        形式参数的作用是实现主函数与被调函数之间的联系。

3.函数的返回值和返回类型

        函数可以有一个返回值,返回值非空类型函数必须有一个返回值,否则会报错。函数的返回值由return 语句给出。

二:函数的调用

1.函数的调用形式

  • 变量在使用前需要首先声明,类似地,函数在调用之前也需要声明。函数的定义就属于函数的声明,因此,在定义了一个函数之后,可以直接调用这个函数。但如果希望在定义一个函数之前调用它,则需要在调用函数之前添加该函数的函数原型声明。形式如下:

        类型说明符 函数名(形参表);

细节:声明函数时,形参表只要包含完整的类型信息即可,形参名可以省略。

  • 声明函数原型后,便可以调用函数。调用形式如下:

                函数名(实参表);

GetSum(a, b);

       实参列表应给出与函数原型形参个数相同、类型相符的实参,每个实参都是一个表达式。

2.嵌套调用

        即不同函数之间的相互调用(非自身调用)。

3.递归调用

        函数可以直接或者间接的调用自己,称为递归调用。

三:函数的参数传递

1.值传递

        当发生函数调用时,给形参分配内存空间,并用实参来初始化形参。实际上值传递相当于拷贝了一份实参,此后形参的变化与实参无联系。

2.引用传递

        给一个变量起别名。通过引用名与通过变量名访问变量的效果相同。

  • 声明一个引用时,必须同时对它初始化,使它指向一个已经存在的对象。
  • 一个引用一旦被初始化之后,对不能改为指向其他对象。换句话说,一个引用,从它诞生起,就必须确定是那个变量的别名,而且始终只能作为这一个变量的别名。

引用类型的形参通过实形结合,成为了实参的一个别名,对形参的任何操作也就会直接作用于实参,相当于就是对实参进行操作。

#include<iostream>
using namespace std;
void swap1(int a, int b)
{
    int temp = a;
    a = b;
    b = temp;
}

void swap2(int &a, int &b)
{
    int temp = a;
    a = b;
    b = temp;
}

int main()
{
    int x = 5, y = 10;
    swap1(x, y);
    cout << x << ends << y << endl; //输出5 10
    swap2(x, y);
    cout << x << ends << y << endl; //输出10 5
}

三:内联函数

        内联函数不是在调用时发生控制转移,而是在编译时将函数体嵌入在每一个调用出。(牺牲空间来换运行效率)

        内联函数定义形式:

        inline 类型说明符 函数名(形参列表)

        {

                语句序列

        }

四:带默认形参值的函数

        函数在定义时可以预先声明默认的形参值。

  • 有默认值的形参必须在形参列表的最后,也就是说,在有默认形参值的形参后面,不能出现无默认值的形参。因为在函数调用中,实参与形参是按从左向右的顺序建立对应关系的。
  • 在相同的作用域内,不允许在同一个函数的多个声明中对同一个参数的默认值重复定义,即使前后定义的值相同。换句话说,就是函数的声明和定义中,一个形参的默认值要么在声明中说明,要么在定义在说明。

五:函数重载

        两个及两个以上的函数,具有相同的函数名,但是形参的个数或者类型不同,这就是函数的重载。

  • 注意:重载函数的形参必须不同:个数或者类型不同。
  • 当使用具有默认形参值的函数重载形式时,需要注意防止二义性。
void fun(int length, int width = 2, int height = 33);
void fun(int length);

int main()
{
    fun(1); //具有二义性,编译器不知道调用哪个函数。
}

六:C++常用系统函数

数学<math.h>:

1.三角函数
double sin (double);
double cos (double);
double tan (double);
2.反三角函数
double asin (double);         结果介于[-PI/2, PI/2]
double acos (double);         结果介于[0, PI]
double atan (double);         反正切(主值), 结果介于[-PI/2, PI/2]
double atan2 (double, double);         反正切(整圆值), 结果介于[-PI/2, PI/2]
3.双曲三角函数
double sinh (double);
double cosh (double);
double tanh (double);
4.指数与对数
double exp (double x);         e的x次幂
double pow (double x, double y);         x的y次幂
double sqrt (double);
double log (double x);         以e为底的对数,即ln x
double log10 (double x);        log10(x) 以10为底。

没有以2为底的函数但是可以用换底公式解 决:log2(N)=log10(N)/log10(2)
5.取整
double ceil (double);         不小于x的最小整数
double floor (double);         不大于x的最大整数
6.绝对值

int abs(int);        整型
long labs(long);        长整型
double fabs (double);        浮点型

7.标准化浮点数
double frexp (double f, int p);         标准化浮点数, f = x * 2^p, 已知f求x, p ( x介于[0.5, 1] )
double ldexp (double x, int p);         与frexp相反, 已知x, p求f
8.取整与取余
double modf (double, double
);         将参数的整数部分通过指针回传, 返回小数部分
double fmod (double, double);         返回两参数相除的余数

9.平方根

double sqrt(double x);

字符<ctype.h>:

int isalpha(int c);        c是否为字母
int isdigit(int c);        c是否为数字
int tolower(int c);        将c转换为小写字母
int toupper(int c);        将c转换为大写字母

字符串<string.h>:

char *strcpy(char *sl,char *s2);        将字符串s2复制给s1,即覆盖
unsigned strlen(char *sr);        求字符串str长度

内存操作<memory.h>:

void *memcpy(void *d,void *s,int c);        将s指向的内存区域的c个字节复制到d指向的区域

类型转换<stdlib.h>:

int atoi(char *s);        将字符串转化为整数
char *itoa(int v,char *s,int x);        将整数v按x进制转成字符串s

时间<time.h>:

time_t time(time_t *timer);        返回1970/1/1零点到目前的秒数

其他<stdlib.h>:

srand(unsigned seed);        设置随机数的种子
int rand();        产生0-RAND_MAX的随机数
exit(int);        终止正在执行的程序

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++函数基础 的相关文章

  • 如何获取正在访问 ASP.NET 应用程序的当前用户?

    为了获取系统中当前登录的用户 我使用以下代码 string opl System Security Principal WindowsIdentity GetCurrent Name ToString 我正在开发一个 ASP NET 应用程
  • C 编程 - 文件 - fwrite

    我有一个关于编程和文件的问题 while current NULL if current gt Id Doctor 0 current current gt next id doc current gt Id Doctor if curre
  • 以文化中立的方式将字符串拆分为单词

    我提出了下面的方法 旨在将可变长度的文本拆分为单词数组 以进行进一步的全文索引处理 删除停止词 然后进行词干分析 结果似乎不错 但我想听听关于这种实现对于不同语言的文本的可靠性的意见 您会建议使用正则表达式来代替吗 请注意 我选择不使用 S
  • 查找c中结构元素的偏移量

    struct a struct b int i float j x struct c int k float l y z 谁能解释一下如何找到偏移量int k这样我们就可以找到地址int i Use offsetof 找到从开始处的偏移量z
  • 嵌套接口:将 IDictionary> 转换为 IDictionary>?

    我认为投射一个相当简单IDictionary
  • 使用实体框架模型输入安全密钥

    这是我今天的完美想法 Entity Framework 中的强类型 ID 动机 比较 ModelTypeA ID 和 ModelTypeB ID 总是 至少几乎 错误 为什么编译时不处理它 如果您使用每个请求示例 DbContext 那么很
  • HTTPWebResponse 响应字符串被截断

    应用程序正在与 REST 服务通信 Fiddler 显示作为 Apps 响应传入的完整良好 XML 响应 该应用程序位于法属波利尼西亚 在新西兰也有一个相同的副本 因此主要嫌疑人似乎在编码 但我们已经检查过 但空手而归 查看流读取器的输出字
  • 创建链表而不将节点声明为指针

    我已经在谷歌和一些教科书上搜索了很长一段时间 我似乎无法理解为什么在构建链表时 节点需要是指针 例如 如果我有一个节点定义为 typedef struct Node int value struct Node next Node 为什么为了
  • 将多个表映射到实体框架中的单个实体类

    我正在开发一个旧数据库 该数据库有 2 个具有 1 1 关系的表 目前 我为每个定义的表定义了一种类型 1Test 1Result 我想将这些特定的表合并到一个类中 当前的类型如下所示 public class Result public
  • WCF 中 SOAP 消息的数字签名

    我在 4 0 中有一个 WCF 服务 我需要向 SOAP 响应添加数字签名 我不太确定实际上应该如何完成 我相信响应应该类似于下面的链接中显示的内容 https spaces internet2 edu display ISWG Signe
  • 使用 Bearer Token 访问 IdentityServer4 上受保护的 API

    我试图寻找此问题的解决方案 但尚未找到正确的搜索文本 我的问题是 如何配置我的 IdentityServer 以便它也可以接受 授权带有 BearerTokens 的 Api 请求 我已经配置并运行了 IdentityServer4 我还在
  • 如何在整个 ASP .NET MVC 应用程序中需要授权

    我创建的应用程序中 除了启用登录的操作之外的每个操作都应该超出未登录用户的限制 我应该添加 Authorize 每个班级标题前的注释 像这儿 namespace WebApplication2 Controllers Authorize p
  • 如何在 C 中调用采用匿名结构的函数?

    如何在 C 中调用采用匿名结构的函数 比如这个函数 void func struct int x p printf i n p x 当提供原型的函数声明在范围内时 调用该函数的参数必须具有与原型中声明的类型兼容的类型 其中 兼容 具有标准定
  • 如何查看网络连接状态是否发生变化?

    我正在编写一个应用程序 用于检查计算机是否连接到某个特定网络 并为我们的用户带来一些魔力 该应用程序将在后台运行并执行检查是否用户请求 托盘中的菜单 我还希望应用程序能够自动检查用户是否从有线更改为无线 或者断开连接并连接到新网络 并执行魔
  • 这些作业之间是否存在顺序点?

    以下代码中的两个赋值之间是否存在序列点 f f x 1 1 x 2 不 没有 在这种情况下 标准确实是含糊不清的 如果你想确认这一点 gcc 有这个非常酷的选项 Wsequence point在这种情况下 它会警告您该操作可能未定义
  • 覆盖子类中的字段或属性

    我有一个抽象基类 我想声明一个字段或属性 该字段或属性在从该父类继承的每个类中具有不同的值 我想在基类中定义它 以便我可以在基类方法中引用它 例如覆盖 ToString 来表示 此对象的类型为 property field 我有三种方法可以
  • 为什么编译时浮点计算可能不会得到与运行时计算相同的结果?

    In the speaker mentioned Compile time floating point calculations might not have the same results as runtime calculation
  • 如何将带有 IP 地址的连接字符串放入 web.config 文件中?

    我们当前在 web config 文件中使用以下连接字符串 add name DBConnectionString connectionString Data Source ourServer Initial Catalog ourDB P
  • 测试用例执行完成后,无论是否通过,如何将测试用例结果保存在变量中?

    我正在使用 NUNIT 在 Visual Studio 中使用 Selenium WebDriver 测试用例的代码是 我想在执行测试用例后立即在变量中记录测试用例通过或失败的情况 我怎样才能实现这一点 NUnit 假设您使用 NUnit
  • 对来自流读取器的过滤数据执行小计

    编辑问题未得到解答 我有一个基于 1 个标准的过滤输出 前 3 个数字是 110 210 或 310 给出 3 个不同的组 从流阅读器控制台 问题已编辑 因为第一个答案是我给出的具体示例的字面解决方案 我使用的实际字符串长度为 450 个

随机推荐

  • rsync脚本+linux,rsync随机启动脚本,rsync脚本

    1 bin sh 2 3 BEGIN INIT INFO4 Provides rsyncd5 Required Start remote fs syslog6 Required Stop remote fs syslog7 Should S
  • mac上完成卸载IntelliJ IDEA 2019.3编辑器

    一 finder gt 应用程序 gt 直接删除idea 二 执行以下命令 rm rf Users 自己的用户名 Library Logs IntelliJIdea2019 3 rm rf Users 自己的用户名 Library Pref
  • 解析 slim.arg_scope

    def resnet arg scope weight decay 0 0001 is training True batch norm decay 0 997 batch norm epsilon 1e 5 batch norm scal
  • C++ 引用规则

    引用及其注意事项 1 引用没有定义 是一种关系型声明 声明它和原有某一变量 实体 的关系 古而类型与源类型保持一会 且不分配内存 与被引用的变量有相同的地址 2 声明的时候必须初始化 一经声明 不可变更 3 可对引用 再次引用 多次引用的结
  • [Leetcode] 76. 最小覆盖子串

    给你一个字符串 s 一个字符串 t 返回 s 中涵盖 t 所有字符的最小子串 如果 s 中不存在涵盖 t 所有字符的子串 则返回空字符串 注意 对于 t 中重复字符 我们寻找的子字符串中该字符数量必须不少于 t 中该字符数量 如果 s 中存
  • 算法(公式法):判断是否完全平方数

    给定一个正整数 num 编写一个函数 如果 num 是一个完全平方数 则返回 True 否则返回 False 说明 不要使用任何内置的库函数 如 sqrt 示例 1 输入 16 输出 True 示例 2 输入 14 输出 False 利用公
  • Qt常用的快捷键

    alt enter 自动创建类定义的实现 F1 查看帮助 文档 F2 快速到变量声明 Shift F2 函数的声明和定义之间快速切换 F4 在 cpp 和 h 文件切换 Ctrl M 创建书签 Ctrl 切换书签 Alt M打开书签栏 Ct
  • SVN学习2020.8.9

    SVN账号密码一般是有一个配置管理员给配置的 文件夹绿色标志 代表和服务器文档是一致的 同步更新的 同步更新服务器信息 update 执行操作都先update 再做其他 先保证本地和服务器一致 先更新 上锁 再修改 再提交 解锁 如何把本地
  • 供应链金融与区块链01——论文阅读

    本文章仅用于记录本人学习过程 当作笔记来用 如有侵权请及时告知 谢谢 1 基于区块链技术的供应链金融体系优化研究 龙云安 但是由于 互联网 供应链 无法 及时跟进资金流和信息流 导致核心企业 供应链金 融平台和提供融资的商业银行无法及时掌控
  • 解决前端跨域的问题.Access to XMLHttpRequest at http://xxx.xxx from origin 'http://localhost:8000' has been bl

    1 前端浏览器报错如下 Access to XMLHttpRequest at http xxx xxx from origin http localhost 8000 has been blocked by CORS policy Res
  • Scratch 3.0源码 之 多语言实现

    文章目录 实现方式 初始版本 多语言版本 1 页面文件 2 配置文件 3 建立关联 语法说明 案例1 带HTML标签写法 建议写法 案例2 带超链接写法 建议写法 Scratch 3 0中各类显示文本默认是英文 如果不支持自己的语言 或者自
  • 红队隧道应用篇之Neo-reGeorg实现内网穿透(四)

    简介 reGeorg是一个能够实现内网穿透的工具 基于socks5协议 且能支持众多脚本 由于此工具使用率过高 导致容易被杀毒软件拦截 现有一个项目是由reGeorg修改而来 而且做了加密和免杀处理 这款工具的名字就叫Neo reGeorg
  • sqlServer 自定义函数-传入参数并返回动态表

    自定义函数 传入参数并返回动态表 create FUNCTION dbo v usrlist usr varchar 20 传入当前用户代码 返回动态表 表里面包含编码及名称两个字段 RETURNS tolist TABLE usrcode
  • 一般面试时会遇到的九大难题的对策解析

    终于接到面试通知书了 欣喜之余开始考虑即将面对的种种问题 所谓有备无患 您是否尝试过面试彩排 建议您现在就不妨试上一试 我想这会帮助你对其他问题的回答做准备 好啦面试开始 想象着考官已经坐在您的面前 问题1 为什么不谈谈你自己 分析 这是个
  • 渲染函数render

    文章目录 节点 树以及虚拟 DOM 树 节点 虚拟 DOM vue中render函数的作用 render函数去创建子组件内容 createElement官方文档 参考 节点 树以及虚拟 DOM 在深入渲染函数之前 了解一些浏览器的工作原理是
  • 2016去哪儿编程题:5-血型遗传检测

    题目描述 血型遗传对照表如下 父母血型 子女会出现的血型 子女不会出现的血型 O与O O A B AB A与O A O B AB A与A A O B AB A与B A B AB O A与AB A B AB O B与O B O A AB B与
  • shell 数组(字符串下标)

    现在游戏开的服务器越来越多了 每次用ssh操作都要写ip地址 很烦 也容易出错 所以要自己搞个服务器名到ip的映射 map anahost count 0 temp cat home linwencai sh HOST while read
  • ubuntu18.04合并pdf文件

    以前使用pdftk比较常见 但是pdftk的更新似乎没有跟上 改用pdfunite轻松解决 pdftk原来使用apt安装 现在改成用snap安装pdftk sudo snap install pdftk pdftk合并命令为 pdftk p
  • 洛谷 P1200 [USACO1.1]你的飞碟在这儿Your Ride Is Here

    题目链接 https www luogu com cn problem P1200 include
  • C++函数基础

    一 函数的定义和使用 1 函数的定义 类型说明符 函数名 含类型说明的形参表 语句序列 如 int GetSum int a int b return a b 2 形式参数 形式参数的作用是实现主函数与被调函数之间的联系 3 函数的返回值和