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

C语言----函数

目录

1. 定义:

2.三要素

3.格式

4. 函数声明

5. 函数调用

6.函数传参

6.1. 值传递

6.2. 地址传递

6.3. 数组传递

string函数族

1.strcpy

2. strlen

3. strcat

4.strcmp

递归函数


1. 定义:

一个完成特定功能的代码模块

2.三要素

功能、参数、返回值

3.格式

存储类型 数据类型 函数名(参数列表)

{

函数体;

return 函数返回值;

}

1) 没有参数:参数列表可以省略,也可以使用 void

2) 没有返回值:数据类型为void,函数内部没有return

3) 有返回值:要根据返回值的数据类型定义函数的数据类型

4) 定义子函数时可以直接定义在主函数上面,如果定义在主函数下面需要提前声明函数

4. 函数声明

数据类型函数名(参数列表);//形参

5. 函数调用

1) 没有返回值:直接调用:函数名(参数列表); // 实参

2) 有返回值:

如果需要接收返回值,就要定义一个与返回值数据类型相同的变量接收

如果不需要接收返回值,就要直接调用函数

简单的使用:

#include <stdio.h>void fun()
{printf("hello\n");
}void add1(int a, int b)
{printf("%d\n", a+b);
}int add2(int a, int b)
{return a + b;
}int sub(int a, int b);int main(int argc, char const *argv[])
{int a = 2, b = 3;fun();add1(1, 2);int num = add2(a, b);printf("%d\n", num);int sum = sub(5, 4);printf("%d\n", sum);printf("%d\n", sub(5,4));return 0;
}int sub(int a, int b)
{return a-b;
}

练习1:编写一个函数,函数的2个参数,第一个是一个字符,第二个是一个char *,返回字符串中该字符的个数。

练习2:编程实现strlen函数的功能,strlen计算字符串实际长度,不包含’\0’

6.函数传参

6.1. 值传递

单向传递,将实参传递给形参使用,改变形参实参不会受到影响

#include <stdio.h>
int fun(int a, int b)
{a++;b++;return a + b;
}int main(int argc, char const *argv[])
{int a = 3, b = 4;int num = fun(a, b);printf("%d %d %d\n", a, b, num);return 0;
}
6.2. 地址传递

双向传递,在函数中修改形参,实参随之变化

#include <stdio.h>int fun(int *a, int *b)
{*a = *a + *b;*b = *b + 2;return *a + *b;
}int main(int argc, char const *argv[])
{int a = 3, b = 4;// 因为你是拿到了地址,对地址进行赋值,并不是拿到值int num = fun(&a, &b);printf("%d %d %d\n", a, b, num);return 0;
}
6.3. 数组传递

和地址传递一样,参数中存在数组的定义,它也会认为是指针

#include <stdio.h>char *fun(char str[32])
{str = "hello";printf("%d\n", sizeof(str)); // 4return str;
}int main(int argc, char const *argv[])
{char *ch = fun("abc");printf("%s\n", ch);    return 0;
}

补充:

// s 在栈区空间开辟4字节空间存放字符串常量 "hello" 的首地址
char *s = "hello";// 在栈区开辟 32 个字节的空间,存放 "hello" 字符串
char str[32] = "hello";

string函数族

1.strcpy

#include <string.h>

char *strcpy(char *dest, const char *src);

功能:实现字符串的复制

参数:dest:目标字符串首地址

src:源字符串首地址

返回值:目标字符串首地址

#include <stdio.h>
#include <string.h>int main()
{char str[32];char ch[32] = "world";strcpy(str, ch);printf("%s\n", str);return 0;
}
复制包括\0

char *strncpy(char *dest, const char *src, size_t n);

功能:实现字符串复制

参数:dest:目标字符串首地址

src:源字符串首地址

n:字符的个数

返回值:目标字符串首地址

#include <stdio.h>
#include <string.h>int main()
{char str[32] = "hello";char ch[32] = "world";strncpy(str, ch, 2);printf("%s\n", str);return 0;
}

2. strlen

#include <string.h>

size_t strlen(const char *s);

功能:计算字符串的实际长度

参数:s:字符串的首地址

返回值:实际长度

3. strcat

#include <string.h>

char *strcat(char *dest, const char *src);

功能:用于字符串拼接

参数:dest:目标字符串首地址

src:源字符串首地址

返回值:目标字符串首地址

#include <stdio.h>
#include <string.h>int main()
{char str[32] = "hello";char ch[32] = "world";strcat(str, ch);printf("%s\n", str);return 0;
}

char *strncat(char *dest, const char *src, size_t n);//拼接str的前n个内容

功能:实现字符串拼接

参数:dest:目标字符串首地址

src:源字符串首地址

n:字符的个数

返回值:目标字符串首地址

4.strcmp

#include <string.h>

int strcmp(const char *s1, const char *s2);

功能:用于字符串比较

参数:s1、s2字符串的首地址

返回值:

从字符串首个字符开始比较字符ASCII的大小,如果相等继续向后比较

1 s1 >s2

0 s1 == s2

-1 s1 < s2

#include <stdio.h>
#include <string.h>int main()
{char s1[] = "hello";char s2[] = "worldworld";char *s3 = "ikun";char *s4 = "nihao";char *s5 = "helloworld";char *s6 = "helloworld";// int ret = strcmp(s1, s2);  // -1// int ret = strcmp(s1, s3);  // -1// int ret = strcmp(s2, s3);  // 1// int ret = strcmp(s2, s4);  // 1int ret = strcmp(s5, s6);  // 0printf("%d\n", ret);return 0;
}

int strncmp(const char *s1, const char *s2, size_t n);比较两个字符串前n个字符的大小

递归函数

1. 定义:自己调用自己

2. 执行过程分为两个阶段

a. 递推阶段:从原问题出发,按递推公式从未知到已知最终达成递归的终止条件

b. 回归阶段:按递推的终止条件求出结果,逆向逐步带入递归公式,回到原问题求解

3. 递归的两个必要条件

a. 存在限制条件,当满足这个限制条件的时候,递推便不再继续

b. 每次递推之后会越来越接近这个限制条件

例子:求 5-1的阶乘

例子2:打印一个数的每一位

接收一个整型值,按照顺序打印它的每一位

示例:1234;

输出:1,2, 3, 4;

思路:递归就是把大事化小,函数自己调用自己

按照顺序打印它的每一位我们就用 1234 % 10就会等于4,这样就打印出一个4,那怎么打印其他的数?123 怎么来呢?1234 / 10 = 123,再继续123 % 10 就等于3以此类推

相关文章:

C语言----函数

目录 1. 定义&#xff1a; 2.三要素 3.格式 4. 函数声明 5. 函数调用 6.函数传参 6.1. 值传递 6.2. 地址传递 6.3. 数组传递 string函数族 1.strcpy 2. strlen 3. strcat 4.strcmp 递归函数 1. 定义&#xff1a; 一个完成特定功能的代码模块 2.三要素 功能、…...

MySQL图形化界面工具--DataGrip

之前介绍了在命令行进行操作&#xff0c;但是不够直观&#xff0c;本次介绍图形化界面工具–DataGrip。 安装DataGrip 官网链接&#xff1a;官网下载链接 常规的软件安装流程。 参考链接&#xff1a;DataGrip安装 使用DataGrip 添加数据源&#xff1a; 第一次使用最下面会…...

PyTorch AMP 混合精度中grad_scaler.py的scale函数解析

PyTorch AMP 混合精度中的 scale 函数解析 混合精度训练&#xff08;AMP, Automatic Mixed Precision&#xff09;是深度学习中常用的技术&#xff0c;用于提升训练效率并减少显存占用。在 PyTorch 的 AMP 模块中&#xff0c;GradScaler 类负责动态调整和管理损失缩放因子&…...

【Ubuntu20.04】Apollo10.0 Docker容器部署+常见错误解决

官方参考文档【点击我】 Apollo 10.0 版本开始&#xff0c;支持本机和Docker容器两种部署方式。 如果您使用本机部署方式&#xff0c;建议使用x86_64架构的Ubuntu 22.04操作系统或者aarch64架构的Ubuntu 20.04操作系统。 如果您使用Docker容器部署方式&#xff0c;可以使用x…...

【文献精读笔记】Explainability for Large Language Models: A Survey (大语言模型的可解释性综述)(二)

****非斜体正文为原文献内容&#xff08;也包含笔者的补充&#xff09;&#xff0c;灰色块中是对文章细节的进一步详细解释&#xff01; 3.1.2 基于注意力的解释&#xff08;Attention-Based Explanation&#xff09; 注意力机制可以揭示输入数据中各个部分之间的关系&#…...

朱姆沃尔特隐身战舰:从失败到威慑

前言 "朱姆沃尔特"号驱逐舰是美国海军雄心勃勃的项目&#xff0c;旨在重塑未来海战。它融合了隐身、自动化和强大火力&#xff0c;然而由于技术问题和预算超支&#xff0c;原计划建造32艘的目标被大幅缩减&#xff0c;最终只建造了三艘。该舰的设计特点包括“穿浪逆船…...

免费分享 | 基于极光优化算法PLO优化宽度学习BLS实现光伏数据预测算法研究附Matlab代码

研究内容 宽度学习系统&#xff08;BLS&#xff09;简介&#xff1a; BLS是一种新型的神经网络结构&#xff0c;由增强节点&#xff08;Enhancement Nodes, ENs&#xff09;和特征节点&#xff08;Feature Nodes, FNs&#xff09;组成&#xff0c;具有结构简单、训练速度快、泛…...

logback日志文件多环境配置路径

项目中遇到问题&#xff0c;springboot项目 本地jar包部署到现场后&#xff0c;经常遇到现场的日志存放的路径会更改&#xff0c;经过查阅&#xff0c;有两种方式&#xff0c;下面简单说明一下。 一、第一种 启动jar包时 添加参数 --logging.configF:\hgtest\config\logback.x…...

面试高频:一致性hash算法

这两天看到技术群里&#xff0c;有小伙伴在讨论一致性hash算法的问题&#xff0c;正愁没啥写的题目就来了&#xff0c;那就简单介绍下它的原理。下边我们以分布式缓存中经典场景举例&#xff0c;面试中也是经常提及的一些话题&#xff0c;看看什么是一致性hash算法以及它有那些…...

docker部署项目

docker部署项目 &#xff08;加载tar包&#xff1a;docker image load -i mysql.tar&#xff09; 一、jdk环境配置 1.jdk下载地址 --Java Archive | Oracle 中国 --选择好版本进入 --下载Linux x64 Compressed Archive的链接 2.解压 --创建文件夹&#xff1a;mkdir /ro…...

每天40分玩转Django:Django Celery

Django Celery 一、知识要点概览表 模块知识点掌握程度要求Celery基础配置、任务定义、任务执行深入理解异步任务任务状态、结果存储、错误处理熟练应用周期任务定时任务、Crontab、任务调度熟练应用监控管理Flower、任务监控、性能优化理解应用 二、基础配置实现 1. 安装和…...

df.groupby(pd.Grouper(level=1)).sum()

df.groupby(pd.Grouper(level1)).sum() 在 Python 中的作用是根据 DataFrame 的某一索引级别进行分组&#xff0c;并计算每个分组的总和。具体来说&#xff1a; df.groupby(...)&#xff1a;这是 pandas 的分组操作&#xff0c;按照指定的规则将 DataFrame 分组。 pd.Grouper(…...

运动控制探针功能详细介绍(CODESYS+SV63N伺服)

汇川AM400PLC和禾川X3E伺服EtherCAT通信 汇川AM400PLC和禾川X3E伺服EtherCAT通信_汇川ethercat通信-CSDN博客文章浏览阅读1.2k次。本文详细介绍了如何使用汇川AM400PLC通过EtherCAT总线与禾川X3E伺服进行通信。包括XML硬件描述文件的下载与安装,EtherCAT总线的启用,从站添加…...

C语言基础18(GDB调试)

文章目录 GDBGDB概述什么是GDB**GDB**的主要功能 GDB的启动GDB常见的启动方式 GDB的退出GDB的常用命令GDB查看源代码指令———list(1)**GDB** 查看设置**------info****GDB** 查看内存**GDB** 设置断点**---break (b)****GDB** 设置观察点**---watch****GDB** 程序调试 GDB完整…...

《向量数据库指南》——应对ElasticSearch挑战,拥抱Mlivus Cloud的新时代

在当今数据驱动的商业环境中,向量数据库的应用正变得愈加重要。随着人工智能和机器学习的快速发展,尤其是在自然语言处理、图像识别及推荐系统等领域,向量数据库以其强大的存储和检索能力,迎来了广泛的应用机会。然而,在实际应用中,企业在选择和实施向量数据库方案时,常…...

c++的stl库中stack的解析和模拟实现

目录 1.stack的介绍和使用 1.1stack的介绍 1.2stack的使用 2.stack的模拟实现 1.stack的介绍和使用 1.1stack的介绍 1. stack 是一种容器适配器&#xff0c;专门用在具有后进先出操作的上下文环境中&#xff0c;其删除只能从容器的一端进行元素的插入与提取操作。 2. stac…...

C语言——字符函数和内存函数

目录 前言 字符函数 1strlen 模拟实现 2strcpy 模拟实现 3strcat 模拟实现 4strcmp 模拟实现 5strncpy 模拟实现 6strncat 模拟实现 7strncmp 模拟实现 8strstr 模拟实现 9strtok 10strerror 11大小写字符转换函数 内存函数 1memcpy 模拟实现 2…...

查询docker overlay2文件夹下的 c7ffc13c49xxx是哪一个容器使用的

问题背景 查询docker overlay2文件夹下的 c7ffc13c49xxx是哪一个容器使用的 [root@lnops overlay2]# du -sh * | grep G 1.7G 30046eca3e838e43d16d9febc63cc8f8bb3d327b4c9839ca791b3ddfa845e12e 435G c7ffc13c49a43f08ef9e234c6ef9fc5a3692deda3c5d42149d0070e9d8124f71 1.…...

Golang的容器编排实践

Golang的容器编排实践 一、Golang中的容器编排概述 作为一种高效的编程语言&#xff0c;其在容器编排领域也有着广泛的运用。容器编排是指利用自动化工具对容器化的应用进行部署、管理和扩展的过程&#xff0c;典型的容器编排工具包括Docker Swarm、Kubernetes等。在Golang中&a…...

【51项目】51单片机自制小霸王游戏机

视频演示效果: 纳新作品——小霸王游戏机 目录: 目录 视频演示效果: 目录: 前言:...

无机布防火卷帘门报价透明,包工包料,一次说清所有费用

很多客户在选购无机布防火卷帘门时&#xff0c;最关心实际成交价格&#xff0c;也担心报价不清晰&#xff0c;后期产生各类额外支出。行业内产品定价参差不齐&#xff0c;选材做工不同&#xff0c;最终价位自然存在差距&#xff0c;挑选时不能只看表面低价。 &#x1f449; 点击…...

Jetson Orin Nano 升级jetpack5.1.2刷机过程记录

一.刷机起因 orin nano 接了个IMX477的摄像头,用 命令行DISPLAY:0.0 nvgstcapture-1.0 显示的画面有撕裂,让卖家查问题,卖家测试没有撕裂,对比环境,orin nano出厂默认的是jetpack5.1.1,卖家用的jetpack5.1.2版本,为了解决差异,要升级jetpack版本,前后搞了2天半,记录一下. 另外…...

告别FTP龟速:用NTFS-3G在CentOS7上直连移动硬盘拷贝200G大文件

告别FTP龟速&#xff1a;用NTFS-3G在CentOS7上直连移动硬盘拷贝200G大文件当面对数百GB的设计素材、日志文件或数据库备份需要迁移时&#xff0c;传统的FTP传输往往会成为效率瓶颈。我曾在一个视频处理项目中&#xff0c;需要将230GB的4K原始素材从移动硬盘导入服务器&#xff…...

别再只测accuracy!DeepSeek集成测试必须监控的5个隐性指标(P99首token延迟、context bleed率、tool-call schema漂移)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;DeepSeek集成测试的核心范式演进 DeepSeek大模型的工程化落地对集成测试提出了全新挑战&#xff1a;传统基于接口响应码与字段校验的测试范式已难以覆盖语义一致性、推理链鲁棒性、上下文敏感度等高阶质…...

‌2026智慧校园规划必读:如何在预算吃紧下选到高性价比方案‌

✅作者简介&#xff1a;合肥自友科技 &#x1f4cc;核心产品&#xff1a;智慧校园平台(包括教工管理、学工管理、教务管理、考务管理、后勤管理、德育管理、资产管理、公寓管理、实习管理、就业管理、离校管理、科研平台、档案管理、学生平台等26个子平台) 。公司所有人员均有多…...

转行网络安全运维:从0到1的可落地指南

转行网络安全运维&#xff1a;从0到1的可落地指南 一、 「3个核心技能&#xff1a;从零起步也能会」 网上学习资料多到爆炸&#xff0c;不用纠结“哪个最好”&#xff0c;记住一句话&#xff1a;**能学会、能上手的就是好的**&#xff01;不管是免费视频还是付费课&#xff0c…...

从开题到定稿零焦虑:okbiye AI 论文写作,帮你把毕业季的 “大山” 变成坦途

okbiye-免费查重复率aigc检测/开题报告/毕业论文/智能排版/文献综述/AI PPT毕业论文 - Okbiye智能写作https://www.okbiye.com/ai/bylw 毕业季的深夜&#xff0c;宿舍台灯下的屏幕亮着刺眼的光&#xff0c;文档里的字数停留在三位数&#xff0c;而 deadline 正一天天逼近。你是…...

Claude SWOT分析(内部风控文档流出版):3类高危使用场景+2个监管红线预警

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Claude SWOT分析&#xff08;内部风控文档流出版&#xff09;&#xff1a;3类高危使用场景2个监管红线预警 高危使用场景识别 在企业级AI应用中&#xff0c;Claude模型若未经严格风控适配&#xff0c;…...

LaTeX公式一键转Word:3步告别数学公式编辑烦恼

LaTeX公式一键转Word&#xff1a;3步告别数学公式编辑烦恼 【免费下载链接】LaTeX2Word-Equation Copy LaTeX Equations as Word Equations, a Chrome Extension 项目地址: https://gitcode.com/gh_mirrors/la/LaTeX2Word-Equation 还在为Word文档中的数学公式编辑而抓狂…...

氘可来昔替尼常见副作用为鼻咽炎头痛及腹泻,如何应对?

任何口服药物的临床价值&#xff0c;都必须在疗效与安全性的天平上找到精准的平衡点。氘可来昔替尼以PASI 75应答率的全面胜出证明了自己在银屑病治疗中的卓越地位&#xff0c;而其不良反应谱同样经过了严苛的临床验证。鼻咽炎、头痛和腹泻构成了这款药物最需关注的三大安全信号…...