当前位置: 首页 > news >正文

浅谈C++函数

目录

  • 一、函数的概念
  • 二、调用函数的两个前提
  • 三、函数传参的三种形式
  • 四、函数返回类型

一、函数的概念

函数是C++程序的基本模块,通常一个C++程序由一个或多个函数组成。函数可以完成用户指定的任务,一般分为库函数和用户自定义的函数。函数由函数头和函数体组成,函数头中包含了函数的函数名、返回类型和参数列表,函数体则描述了函数执行任务的过程和结果。

二、调用函数的两个前提

首先需要函数声明,编译器需要根据函数声明来判断调用函数的使用是否正确。其次需要函数定义,编译器判断调用函数的使用无误之后,会停止当前函数的运行,进入被调函数的定义执行被调函数,然后返回原函数继续往下执行。
在这里插入图片描述

三、函数传参的三种形式

在C++中函数有三种传参方式:值传递、指针传递和引用传递。

1. 值传递
值传递时,形参的改变不会影响实参。因为形参和实参是两个变量,它们都有自己的内存空间,只是存储的值相同。

2. 指针传递
指针传递时,形参的改变可以影响实参。虽然形参和实参依旧是两个变量,但是形参存储了实参的地址,指向实参,可以通过解引用运算符(*)对实参的值进行修改。如果不想让实参被改变,可以添加const限定符。

3. 引用传递
引用传递时,形参的改变一定影响实参。因为实参和形参是一个变量,形参只是实参的别名。如果不想让形参改变,可以添加const限定符。

下面通过一个交换两个数的代码,来对上面三种形式做出直观的说明:

// 函数声明
void Swap1(int a, int b);  // 值传递
void Swap2(int* a, int* b);  // 指针传递
void Swap3(int& a, int& b);  // 引用传递int main()
{int a = 10, b = 5;// 交换a和bSwap1(a, b);cout << "值传递: " << "a = " << a << ", b = " << b << endl;Swap2(&a, &b);cout << "指针传递: " << "a = " << a << ", b = " << b << endl;Swap3(a, b);cout << "引用传递: " << "a = " << a << ", b = " << b << endl;return 0;
}// 函数定义
void Swap1(int a, int b)  // 值传递
{int temp = b;b = a;a = temp;
}
void Swap2(int* a, int* b)  // 指针传递
{int temp = *b;*b = *a;*a = temp;
}
void Swap3(int& a, int& b)  // 引用传递
{int temp = b;b = a;a = temp;
}

运行结果如下:
在这里插入图片描述
可以看到值传递并没有交换a和b,因为它只是交换了a和b的副本。指针传递通过解引用操作找到了原函数的a和b然后进行交换。引用传递使用的就是原函数的a和b本身。这里点到为止,只需要知道函数有三种传参方法和如何使用这三种方法就可以了。

四、函数返回类型

作者认为函数返回类型可以分为四种:无返回(void)、返回值、返回指针和返回引用。
无返回类型就是调用函数结束没有返回值给原函数。而返回值是返回被调函数中变量的临时拷贝,使用完后丢弃。返回指针和引用可以在原函数中使用被调函数的变量。注意: 不能返回被调函数中定义的局部变量的指针或引用,函数调用结束后,该变量被销毁,其内存空间被操作系统回收。如果通过返回的指针或引用去访问这块空间,会造成非法访问。

相关文章:

浅谈C++函数

目录 一、函数的概念二、调用函数的两个前提三、函数传参的三种形式四、函数返回类型 一、函数的概念 函数是C程序的基本模块&#xff0c;通常一个C程序由一个或多个函数组成。函数可以完成用户指定的任务&#xff0c;一般分为库函数和用户自定义的函数。函数由函数头和函数体…...

6.小程序页面布局 - 账单明细

文章目录 1. 6.小程序页面布局 - 账单明细1.1. 竞品1.2. 布局分析1.3. 布局demo1.4. 页面实现-头部1.5. 账单明细1.5.1. 账单明细-竞品分析1.5.2. 账单明细-实现1.5.2.1. 账单明细-实现-mock数据1.5.2.2. 每日收支数据的聚合整理1.5.2.3. 页面scroll-view 1.6. TODO 1. 6.小程序…...

记录ES7.X更新数据的低级错误

背景&#xff1a;新项目复用之前同事遗留下的方法 问题&#xff1a;ES跨索引更新数据错误 排查&#xff1a;复用同事的方法有问题&#xff0c;他直接使用ES别名更新数据导致&#xff0c;只有一个索引时无问题&#xff0c;当多个索引使用同一别名时会出现异常 解决&#xff1…...

【简单介绍下链表基础知识】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…...

leetcode 2915.和为目标值的最长子序列的长度

思路&#xff1a;01背包 这个背包问题很经典了&#xff0c;但是这里涉及到一个问题&#xff0c;就是我们转化问题的时候发现&#xff0c;这个背包需要正好装满才行。这里我们把长度作为价值&#xff0c;也就是说每一个数的价值都是1。 我们需要把dp初始化为全部为负数&#x…...

欧拉函数、快速幂、扩展欧几里得算法、中国剩余定理和高斯消元

欧拉函数 给定 n 个正整数 ai&#xff0c;请你求出每个数的欧拉函数。 欧拉函数的定义1∼N 中与 N 互质的数的个数被称为欧拉函数&#xff0c;记为 ϕ(N)。 若在算数基本定理中&#xff0c;Np1a11p2a2…pmm&#xff0c;则&#xff1a;ϕ(N) Np1−1/p1p2−1/p2…pm−1/pm 输…...

自定义原生小程序顶部及获取胶囊信息

需求&#xff1a;我需要将某个文字或者按钮放置在小程序顶部位置 思路&#xff1a;根据获取到的顶部信息来定义我需要放的这个元素样式 * 这里我是定义某个指定页面 json&#xff1a;给指定页面的json中添加自定义设置 "navigationStyle": "custom" JS&am…...

yolov8推理由avi改为mp4

修改\ultralytics-main\ultralytics\engine\predictor.py&#xff0c;即可 # Ultralytics YOLO &#x1f680;, AGPL-3.0 license """ Run prediction on images, videos, directories, globs, YouTube, webcam, streams, etc.Usage - sources:$ yolo modepred…...

Vue3设置缓存:storage.ts

在vue文件使用&#xff1a; import { Local,Session } from //utils/storage; // Local if (!Local.get(字段名)) Local.set(字段名, 字段的值);// Session Session.getToken()storage.ts文件&#xff1a; import Cookies from js-cookie;/*** window.localStorage 浏览器永…...

超市信息管理系统(java+swing+jdbc+msyql)

...

如何用AI工具提升日常工作效率,帮我们提速增效减负

昨天&#xff0c;coze海外版支持了GPT4o&#xff0c; 立马体验了下&#xff0c;速度杠杠的。 https://www.coze.com 支持chatGP和gemini模型&#xff0c;需要科学上网。国内 https://www.coze.cn支持语雀、KIMI模型。 这里回到正题&#xff0c; 如何用AI工具提升日常工作效率…...

C++: 优先级队列的模拟实现和deque

目录 一、优先级队列 1.1优先级队列 priority_queue介绍 1.2优先级队列的使用 1.3priority_queue的模拟实现 二、deque 2.1deque介绍 2.2deque的优缺点 2.3为什么选择deque作为stack和queue的底层默认容器 一、优先级队列 1.1优先级队列 priority_queue介绍 1.11 优先级队…...

C++ socket epoll IO多路复用

IO多路复用通常用于处理单进程高并发&#xff0c;在Linux中&#xff0c;一切皆文件&#xff0c;一个socket连接会对应一个文件描述符&#xff0c;在监听多个文件描述符的状态应用中epoll相对于select和poll效率更高 epoll本质是系统在内核维护了一颗红黑树&#xff0c;监听的文…...

缓存IO与直接IO

IO类型 缓存 I/O 缓存 I/O 又被称作标准 I/O&#xff0c;大多数文件系统的默认 I/O 操作都是缓存 I/O。在 Linux 的缓存 I/O 机制中&#xff0c;数据先从磁盘复制到内核空间的缓冲区&#xff0c;然后从内核空间缓冲区复制到应用程序的地址空间&#xff08;用户空间&#xff0…...

输入输出(3)——C++的标准输入流

目录 一、cin 流 二、成员函数 get 获取一个字符 (一)无参数的get函数。 (二)有一个参数的get函数。 (三&#xff09;有3个参数的get函数 (四&#xff09;用成员函数 getline 函数读取一行字符 (五&#xff09;用成员函数 read 读取一串字符 (六&#xff09;istream 类…...

[力扣题解] 344. 反转字符串

题目&#xff1a;344. 反转字符串 思路 双指针法 代码 class Solution { public:void reverseString(vector<char>& s) {int i, j, temp;for(i 0, j s.size()-1; i < j; i, j--){temp s[j];s[j] s[i];s[i] temp;}} };...

找不到msvcr110.dll无法继续执行代码的原因分析及解决方法

在计算机使用过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中之一就是找不到msvcr110.dll文件。这个错误通常发生在运行某些程序或游戏时&#xff0c;系统无法找到所需的动态链接库文件。为了解决这个问题&#xff0c;下面我将介绍5种常见的解决方法。 一&#…...

深入理解数仓开发(一)数据技术篇之日志采集

前言 今天开始重新回顾电商数仓项目&#xff0c;结合《阿里巴巴大数据之路》和尚硅谷的《剑指大数据——企业级电商数据仓库项目实战 精华版》来进行第二次深入理解学习。之前第一次学习数仓&#xff0c;虽然尽量放慢速度力求深入理解&#xff0c;但是不可能一遍掌握&#xff0…...

Edge浏览器:重新定义现代网页浏览

引言 - Edge的起源与重生 Edge浏览器&#xff0c;作为Microsoft Windows标志性的互联网窗口&#xff0c;源起于1995年的Internet Explorer。在网络发展的浪潮中&#xff0c;IE曾是无可争议的霸主&#xff0c;但随着技术革新与用户需求的演变&#xff0c;它面临的竞争日益激烈。…...

HDFS,HBase,MySQL,Elasticsearch ,MongoDB分别适合存储什么特征的数据?

HDFS&#xff08;Hadoop Distributed File System&#xff09;通常用于存储大规模数据&#xff0c;适合存储结构化和非结构化数据&#xff0c;例如文本文件、日志数据、图像和视频等。 HBase是基于Hadoop的分布式数据库&#xff0c;适合存储大量非结构化和半结构化的数据&…...

3个革新方案:解决Steam创意工坊模组下载难题

3个革新方案&#xff1a;解决Steam创意工坊模组下载难题 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 开篇&#xff1a;当你第5次输错游戏ID时 你是否遇到过这样的场景&…...

【2026年最新版】Java JDK安装、环境配置教程 (图文非常详细)

1. 下载 JDK Java Downloads | Oracle 以JDK21为例&#xff1a; 选择适合 JDK 版本&#xff0c;本文选择JDK 21在Windows x64环境下安装 x64 Installer。 选择建议&#xff1a; 普通用户&#xff1a;选择 x64 Installer&#xff0c;简便、快速。开发者或需要灵活控制安装位…...

第七届全球校园人工智能算法精英大赛-算法巅峰赛产业命题赛第3赛季优化题--多策略混合算法

前言 全球校园人工智能算法精英大赛”是江苏省人工智能学会举办的面向全球具有正式学籍的全日制高等院校及以上在校学生举办的算法竞赛。其中的算法巅峰赛属于产业命题赛道&#xff0c;这是第3赛季&#xff0c;这次优化题的主题是 “碳中和”。 回顾 第七届全球校园人工智能算…...

好用的山东蜂窝卤煮锅推荐

好的&#xff0c;为您介绍一款在食品加工领域应用广泛且口碑良好的设备。专业之选&#xff1a;广合盛蜂窝卤煮锅在寻找一款高效、稳定且合规的卤煮设备时&#xff0c;来自山东广合盛机械科技有限公司的蜂窝卤煮锅是一个值得考虑的专业选项。该公司专注于食品加工设备的研发与制…...

Zookeeper分布式协调

一、总览图1、定义 ZooKeeper 集群协调器 它是一个分布式协调服务&#xff0c;专门为分布式应用提供一致性、可靠性的协调功能&#xff0c;解决分布式环境下的数据同步、配置管理、状态监控等问题。 2、部署3、数据模型 Znode树结构&#xff1a;采用层级化的命名空间&#xff…...

智能家居中枢:OpenClaw通过Qwen3.5-9B控制HomeKit设备

智能家居中枢&#xff1a;OpenClaw通过Qwen3.5-9B控制HomeKit设备 1. 为什么需要AI控制智能家居&#xff1f; 去年装修新房时&#xff0c;我安装了二十多个HomeKit设备。每天早晨需要对着手机喊"Siri打开窗帘"&#xff0c;晚上又要手动设置"影院模式"。这…...

【技术精讲】从理论到实践:手把手教你完成DFA最小化

1. 什么是DFA最小化&#xff1f;为什么需要它&#xff1f; 想象一下你正在整理一个杂乱无章的衣柜。有些衣服你从来不穿&#xff08;死状态&#xff09;&#xff0c;有些衣服功能重复&#xff08;等价状态&#xff09;。DFA最小化就像给衣柜做断舍离&#xff0c;保留所有必要的…...

5分钟解锁你的首个Gemini AI智能体:全栈开发终极指南

5分钟解锁你的首个Gemini AI智能体&#xff1a;全栈开发终极指南 【免费下载链接】gemini-fullstack-langgraph-quickstart Get started with building Fullstack Agents using Gemini 2.5 and LangGraph 项目地址: https://gitcode.com/gh_mirrors/ge/gemini-fullstack-lang…...

vLLM-v0.17.1部署案例:跨境电商多语言商品描述生成系统落地

vLLM-v0.17.1部署案例&#xff1a;跨境电商多语言商品描述生成系统落地 1. 项目背景与需求分析 跨境电商平台面临着一个共同挑战&#xff1a;如何高效生成多语言商品描述。传统人工撰写方式存在以下痛点&#xff1a; 语言障碍&#xff1a;需要雇佣多语种文案人员成本高昂&am…...

Python入门之函数调用

第1关&#xff1a;内置函数 - 让你偷懒的工具任务描述 我们在编程过程中会用到很多函数&#xff0c;但我们不需要每个函数都自己去编写&#xff0c;因为 Python 内置了很多十分有用的函数&#xff0c;我们在编程过程中可以直接调用。本关目标是让学习者了解并掌握一些常用的 Py…...