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

【C++语法篇】:函数

文章目录

  • 前言
    • 1. 基本结构
    • 2. 函数参数
    • 3. 函数重载
    • 4. 函数嵌套
    • 5. 函数递归
    • 6. 内联函数


前言

在这里插入图片描述

  • C++ 语法的学习整理,作为个人总结使用。

1. 基本结构

  • 函数接收输入,进行计算或操作,然后返回一个结果;
  • 返回类型 函数名(参数列表) {
    // 函数体:所有操作的代码
    return 返回值; // 结束函数并返回结果
    }
#include <iostream>
using namespace std;int findMax(int a, int b) {return (a > b) ? a : b;
}int main() {int num1 = 2, num2 = 4;int maxNum = findMax(num1, num2);cout << "maxNum:" << maxNum << endl;return 0;
}

2. 函数参数

  • 按值传递:将参数的值复制一份传给函数,这样函数内部的操作不会影响到原来的变量;
#include <iostream>
using namespace std;void increment(int a) {a = a + 1;cout << "increment 函数内部a的值:" << a << endl;
}int main() {int num = 5;increment(num); cout << "main 函数num的值:" << num << endl;return 0;
}
  • 按引用传递:在参数前加上&,这样函数的修改会影响到外部变量;
#include <iostream>
using namespace std;void increment(int &a) {a = a + 1;cout << "increment 函数内部a的值:" << a << endl;
}int main() {int num = 5;increment(num);cout << "main 函数num的值:" << num << endl;return 0;
}
  • 默认参数:函数的某些参数有默认值;
#include <iostream>
using namespace std;int add(int a, int b = 2) {return a + b;
}int main() {cout << "add(1): " << add(1) << endl;cout << "add(1, 3): " << add(1, 3) << endl;return 0;
}
  • 变长参数:函数可以接收不同数量的参数;
#include <cstdarg>
#include <iostream>
using namespace std;int sum(int count, ...) {va_list args;   //参数列表对象va_start(args, count);   //count是参数数量int total = 0;for (int i = 0; i < count; ++i) {total += va_arg(args, int);   //获取每一个参数,类型是int}va_end(args);   //清理参数列表return total;
}int main() {cout << "3个数的总和: " << sum(3, 1, 2, 3) << endl;cout << "7个数的总和: " << sum(7, 1, 2, 3, 4, 5, 6, 7) << endl;return 0;
}

3. 函数重载

  • 用相同的函数名来处理不同的参数类型或数量;
  • 要重载一个函数,需要遵循以下基本规则:1. 参数数量不同;2. 参数类型不同;3. 返回类型可以相同或不同,但必须有参数的不同;
#include <iostream>
using namespace std;int max(int a, int b) {return (a > b) ? a : b;
}double max(double a, double b) {return (a > b) ? a : b;
}int max(int a, int b, int c) {return (a > b) ? ((a > c) ? a : c) : ((b > c) ? b : c);
}int main() {cout << "max(10, 20): " << max(10, 20) << endl;cout << "max(10.5, 20.3): " << max(10.5, 20.3) << endl;cout << "max(10, 20, 30): " << max(10, 20, 30) << endl;return 0;
}

4. 函数嵌套

  • 函数嵌套就是一个函数调用另一个函数;
#include <iostream>
using namespace std;int add(int a, int b) {return a + b;
}void calculate(int x, int y, int &result) {result = add(x, y);
}int main() {int num1 = 40, num2 = 20;int sum;calculate(num1, num2, sum);cout << "num1 + num2 = " << sum << endl;return 0;
}

5. 函数递归

  • 在函数内部调用自身,但是需要有一个“停止条件”,让函数停止调用自己;
#include <iostream>
using namespace std;// 计算阶乘
int factorial(int n) {if (n == 1) {return 1;  // 基准条件:1的阶乘就是1} else {return n * factorial(n - 1);  // 递归调用:n乘以(n-1)的阶乘}
}int main() {int number = 5;cout << number << "的阶乘是:" << factorial(number) << endl;return 0;
}

6. 内联函数

  • 内联函数就是编译器把函数的代码直接插入到调用的地方,而不是进行一次函数调用,这样可以减少函数调用的开销,提高程序的执行效率;
#include <iostream>
using namespace std;inline int max(int a, int b) {   //关键字:inlinereturn (a > b) ? a : b;
}int main() {int num1 = 10, num2 = 20;cout << "较大的数字是:" << max(num1, num2) << endl;return 0;
}

http://www.dtcms.com/a/354118.html

相关文章:

  • 超越ChatBI!深度解析衡石HENGSHI SENSE 6.0如何实现全流程AI赋能
  • 第二阶段WinFrom-7:文件操作补充,泛型复习,协变和逆变
  • Python LangChain RAG从入门到项目实战09.:LangChain 中的 Retriever(检索器)
  • buuctf——web刷题第5页
  • Vue2 基础用法
  • CVPR深度学习研究指南:特征提取模块仍是论文创新难点
  • 吴恩达机器学习作业二:线性可分逻辑回归
  • CMake构建学习笔记21-通用的CMake构建脚本
  • Liunx内核驱动
  • Java中StringBuilder原理以及使用
  • D4145低功耗GFCI接地故障控制芯片介绍
  • 题目—移除元素
  • 作业帮,途虎养车,得物,途游游戏,三七互娱,汤臣倍健,游卡,快手26届秋招内推
  • JUC多线程个人笔记
  • 【DC工具GUI入门】
  • APP测试全流程以及测试点
  • 【开题答辩全过程】以 基于SpringBoot的流浪动物领养系统的设计与实现 为例,包含答辩的问题和答案
  • 从Java到Go:初遇Go语言的震撼体验
  • 力扣 30 天 JavaScript 挑战 第41天 (第十二题)对异步操作,promise,async/await有了更深理解
  • 【Linux实时内核机制】ww_rt_mutex 的contending_lock异常问题
  • android/java中主线程和子线程的详解
  • Nano Banana揭秘:Google Gemini 2.5 Flash Image正式发布 | AI图像编辑新时代
  • 内网应用如何实现外网访问?外地通过公网地址访问内网服务器的设置方法
  • 动态规划:青蛙跳台阶实践
  • H20 性能表现之 Kimi-K2
  • 【git】:gitee项目管理vs2019
  • 装饰器进阶与设计模式
  • Linux入门教程 第十五章 Linux 系统调优工具
  • 【工具篇】github/huggingface 镜像源总结
  • 嵌入式系统学习Day24(线程)