【C语言】07.函数

一、概念

C语言的函数,有些翻译为:子程序,子程序这种翻译更加准确⼀些。
C语言中的函数就是⼀个完成某项特定的任务的⼀小段代码。这段代码是有特殊的写法和调用方法的。
C语言的程序其实是由无数个小的函数组合而成的,也可以说:⼀个大的计算任务可以分解成若干个较小的函数(对应较小的任务)完成。同时⼀个函数如果能完成某项特定任务的话,这个函数也是可以用的,提升了开发软件的效率

在C语言中我们⼀般会见到两类函数:
• 库函数
• 自定义函数

二、库函数

C语言标准中规定了C语言的各种语法规则,C语言并不提供库函数;C语言的国际标准ANSI C规定了⼀些常用的函数的标准,被称为标准库,那不同的编译器厂商根据ANSI提供的C语言标准就给出了⼀系列函数的实现。这些函数就被称为库函数。
我们可以从这个网站详细学习
库函数是在标准库中对应的头文件中声明的,所以库函数的使用,务必包含对应的头文件,不包含是可能会出现⼀些问题的。

三、自定义函数

除了库函数外,还有自定义函数,它为程序员提供了很强的可操作性。自定义函数形式如下:

ret_type fun_name(形式参数)
{
}

例如:实现加法:

int Add(int x, int y)
{return x+y;
}

四、形参与实参

实参:在调用函数时传递的参数,就是真实传递的参数
形参:像上述代码中x,y这样的变量称为形式参数。形式参数只有在函数被调用的过程中为了存放实参传递过来的值,才向内存申请空间,这个过程就是形式的实例化。
在这里插入图片描述
通过调试我们可以知道:形参是实参的一份临时拷贝

五、return语句

在函数的设计中,函数中经常会出现return语句,这里讲⼀下return语句使用的注意事项。
• return后边可以是⼀个数值,也可以是⼀个表达式,如果是表达式则先执行表达式,再返回表达式的结果。
• return后边也可以什么都没有,直接写 return; 这种写法适合函数返回类型是void的情况。
• return返回的值和函数返回类型不⼀致,系统会自动将返回的值隐式转换为函数的返回类型。
• return语句执行后,函数就彻底返回,后边的代码不再执行。
• 如果函数中存在if等分⽀的语句,则要保证每种情况下都有return返回,否则会出现编译错误。

六、数组做函数参数

我们需要知道数组做形参的几个知识点:
• 函数的形式参数要和函数的实参个数匹配
• 函数的实参是数组,形参也是可以写成数组形式的
• 形参如果是⼀维数组,数组大小可以省略不写
• 形参如果是⼆维数组,行可以省略,但是列不能省略
• 数组传参,形参是不会创建新的数组的
• 形参操作的数组和实参的数组是同⼀个数组

七、嵌套调用与链式访问

嵌套调用就是函数之间的互相调用。
链式访问就是将⼀个函数的返回值作为另外⼀个函数的参数,像链条⼀样将函数串起来就是函数的链式访问。

#include <stdio.h>
int main()
{printf("%d", printf("%d", printf("%d", 43))); //打印结果:4321return 0;
}

八、函数声明与定义

8.1单个文件

#include<stdio.h>//函数定义
int Add(int x,int y);int main()
{int a=10,b=2;int c=Add(a,b);//函数调用printf("%d",c);return 0;
}
//函数声明
int Add(int x,int y)
{return x+y;
}

函数的定义也是⼀种特殊的声明,所以如果函数定义放在调用之前也是可以的。

8.2多个文件

⼀般在企业中我们写代码时候,代码可能比较多,不会将所有的代码都放在⼀个文件中;我们往往会根据程序的功能,将代码拆分放在多个文件中。
⼀般情况下,函数的声明、类型的声明放在头文件(.h)中,函数的实现是放在源文件(.c)⽂件中。

九、static 和 extern

staticextern 都是C语言中的关键字。
static 是 静态的 的意思,可以用来:
• 修饰局部变量
• 修饰全局变量
• 修饰函数
extern 是用来声明外部符号的。

在讲解这两个关键字之前,我们先来聊一聊作用域与生命周期。

作用域是限定的名字能够使用的范围。

  1. 局部变量的作用域是变量所在的局部范围。
  2. 全局变量的作用域是整个工程(项目)。

生命周期指变量的创建(申请内存)到变量的销毁(收回内存)之间的⼀个时间段。

  1. 局部变量的⽣命周期是:进⼊作用域变量创建,生命周期开始,出作用域生命周期结束。
  2. 全局变量的⽣命周期是:整个程序的生命周期。

在这里插入图片描述
未来⼀个变量出了函数后,我们还想保留值,等下次进入函数继续使用,就可以使用static修饰。

extern是用来声明外部符号的,如果⼀个全局的符号在A文件中定义的,在B文件中想使用,就可以使用 extern 进行声明,然后使用。但是static只能在当前文件中使用。
⼀个函数只想在所在的源文件内部使用,不想被其他源文件使用,就可以使用 static 修饰。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/849807.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

湘财证券:核心系统数据库迁移实践分享

6月5日&#xff0c;在某信息技术应用创新产业峰会上&#xff0c;湘财证券发表了题为“核心系统数据库迁移实践分享”的主题演讲&#xff0c;探讨了湘财证券核心系统在金仓数据库的支撑下&#xff0c;完成国产化升级的策略和创新成果&#xff0c;受到国资、金融、医疗、教育、交…

【大数据架构】基于流式数据的大数据架构升级

背景 团队在升级大数据架构,摒弃了原来基于hadoop的架构,因此抛弃了hive,hdfs,mapreduce这一套,在讨论和摸索中使用了新的架构。 后端使用kafka流式数据通过rest catalog写入iceberg,存储于minio。在写入iceberg的时候,首先是写data数据文件,然后再写iceberg的metada…

Java 垃圾回收机制 GC 及常用的垃圾回收算法

在 Java 中&#xff0c;所有的对象都是要存在内存中的&#xff08;也可以说内存中存储的是一个个对象&#xff09;&#xff0c;因此我们将内存回收&#xff0c;也可以叫做死亡对象的回收&#xff1b; GC 回收的目标是堆上的对象&#xff1b;而栈中的局部变量会跟随栈帧的声明周…

智谱AI——智能体开发探索

智谱AI——智能体开发探索 智谱AI开放平台&#xff1a;https://open.bigmodel.cn/ 点击网页右上角“开发工作台”。进入工作台后&#xff0c;可点击进入“文档中心”。 文档中心/接口文档&#xff1a;https://open.bigmodel.cn/dev/api 使用指南&#xff1a;https://open.b…

vue2组件封装实战系列目录

写在前面 本系列教程是vue2的一套技术文章&#xff0c;参考的对象是曾经极为辉煌的elementui组件库&#xff0c;虽然现在已经都开始使用vue3了&#xff0c;但是研究这套组件库&#xff0c;对于提升我们的封装思维还是有很大作用的&#xff01;&#xff01;所以活不多少&#x…

OutOfDirectMemoryError堆外内存溢出Bug解决

问题描述&#xff1a; springboot 2.0&#xff0c;整合redis实现缓存&#xff0c;当并发请求上来达到一定量级&#xff0c;会导致系统爆发该异常。 产生原因&#xff1a; 1.springboot 2.0以后默认使用lettuce作为操作redis的客户端&#xff0c;lettuce使用netty进行网络通讯…

【开源】医院电子病历管理系统 SSM+JSP+MySQL

目录 一、项目介绍 科室模块 医生模块 预约挂号模块 就诊记录模块 就诊评价模块 二、项目界面 三、核心代码 一、项目介绍 经典老框架SSM打造入门项目《医院电子病历管理系统》&#xff0c;分为用户网页和管理后台&#xff0c;包括科室模块、医生模块、预约挂号模块、…

[MQTT]服务器EMQX搭建SSL/TLS连接过程(wss://)

&#x1f449;原文阅读 &#x1f4a1;章前提示 本文采用8084端口进行连接&#xff0c;是EMQX 默认提供了四个常用的监听器之一&#xff0c;如果需要添加其他类型的监听器&#xff0c;可参考官方文档&#x1f517;管理 | EMQX 文档。 本文使用自签名CA&#xff0c;需要提前在L…

【Redis】构建强韧的远程Redis连接与端口保障机制完美指南

【Redis】构建强韧的远程Redis连接与端口保障机制完美指南 大家好 我是寸铁&#x1f44a; 总结了【Redis】构建强韧的远程Redis连接与端口保障机制完美指南✨ 喜欢的小伙伴可以点点关注 &#x1f49d; 前言 在当今的软件开发领域中&#xff0c;远程访问和操作数据存储是极为常见…

华为OD刷题C卷 - 每日刷题 17(字符串序列判定,最长的指定瑕疵度的元音子串)

1、&#xff08;字符串序列判定&#xff09;&#xff1a; 这段代码是解决“字符串序列判定”的问题。它提供了一个Java类Main&#xff0c;其中包含main方法和getResult方法&#xff0c;用于判断字符串S是否是字符串L的有效子串。 main方法首先读取两个字符串S和L&#xff0c;…

分布式锁与信号量详解

一、引言 在分布式系统中&#xff0c;数据的一致性和并发控制是两大核心挑战。分布式锁和信号量作为解决这些问题的关键工具&#xff0c;被广泛应用于各种分布式场景中。本文将对分布式锁和信号量的概念、原理、实现方式以及应用场景进行详细介绍&#xff0c;并通过具体的代码…

STM32项目分享:智能家居安防系统

目录 一、前言 二、项目简介 1.功能详解 2.主要器件 三、原理图设计 四、PCB硬件设计 1.PCB图 2.PCB板及元器件图 五、程序设计 六、实验效果 七、资料内容 项目分享 一、前言 项目成品图片&#xff1a; 哔哩哔哩视频链接&#xff1a; https://www.bilibili.c…

Decimal要从str转换以避免精度问题

最近遇到一个python的小数的问题&#xff0c;本来应该很简单的小于判断&#xff0c;无论如何都不正确&#xff0c;而且浮点小数都没问题&#xff0c;但decimal小数有问题&#xff0c;给我整蒙了&#xff0c;后来才发现是对decimal不了解所致&#xff0c;如果你还用float转decim…

翻转二叉树-力扣

翻转二叉树&#xff0c;通过前序遍历的顺序&#xff0c;从根节点开始&#xff0c;将节点的左右子节点一次进行交换即可。 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), …

Flowable项目启动报错#java.time.LocalDateTime cannot be cast to java.lang.String

Flowable 项目启动后报错 flow项目第一次启动创建表成功&#xff0c;但是第二次启动时报错信息如下&#xff1a; 1、Error creating bean with name ‘appRepositoryServiceBean’ defined in class 2、Error creating bean with name ‘flowableAppEngine’: FactoryBean t…

立创小tips

立创小tips 原理图中 1-修改图纸属性 保存完&#xff0c;绘制原理图的界面就出现了&#xff0c;然后我们鼠标点击原理图的边缘变成红色就可以高边表格的属性了。 2-鼠标右键可以移动整个原理图 3-查看封装 点击任意一个元器件&#xff0c;在右侧就会显示封装属性&#xff…

基于fabric封装一个简单的图片编辑器(vue 篇)

介绍 前言vue demo版本react 版本 前言 对 fabric.js 进行二次封装&#xff0c;实现图片编辑器的核心功能。核心代码 不依赖 ui响应式框架vue ,react 都适用。 只写了核心编辑相关代码便于大家后续白嫖二次开发 核心代码我就没有打包发布 会 和 业务代码一起放到项目中。 vu…

socket通信(C语言+Python)

在socket文件夹下创建server.c和client.c。 服务端代码&#xff08;server.c&#xff09;&#xff1a; #include <stdio.h> #include <Winsock2.h> void main() {WORD wVersionRequested;WSADATA wsaData;int err;wVersionRequested MAKEWORD( 1, 1 );err WSAS…

文章解读与仿真程序复现思路——电网技术EI\CSCD\北大核心《基于日间-日内不确定集的中长期电源扩展规划》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

简说SQLServer

SQLServer是Microsoft公司推出的一种关系型数据库系统&#xff0c;下面将对其进行详细的解析&#xff0c;包括其主要特性、功能、版本介绍等方面&#xff1a; 一、主要特性 高性能设计&#xff1a;SQLServer充分利用WindowsNT的优势&#xff0c;提供高性能的数据库操作。系统…