C语言——函数
导读 :
这篇文章主要讲解一下C语言函数的一些基本知识。
前言:函数的概念
C语言中的函数又常常被称为子程序,是用来完成某项特定的工作的一段代码。就像我们生活中的模块化建造技术,类比模块化建房子的过程:整个程序好比最终要建成的房子,而函数所代表的就是每部分模块(如第一层,第二层或者屋顶···),将这些模块灵活的拼接,就搭建成了最后的房子。
从函数的定义角度:我们可以把函数分为库函数和自定义函数
一,库函数:
库函数是由C语言编译系统提供的,已经有一定功能的,我们只需在程序前包含有该函数原型的头文件就可以直接使用这些函数。
比如我们常用的 printf函数:
#include<stdio.h> // <stdio.h>就是包含printf函数的头文件
int main ()
{
printf("yeah"); // printf就是C语言提供的有打印功能的库函数,不需要我们自己定义
}
寻找C中的库函数及其有关的头文件的网址(C/C++官方的链接):
http://zh.cppreference.com/w/c/header
二,自定义函数:
是由用户根据需要自行编写的函数,创建格式如下:
ret_type name(形式参数)
{
函数体(用来描述函数执行过程的部分)
}
创建例子:
#include<stdio.h> //int 决定了z的返回类型是整形
int plus(int x,int y) //plus是函数名 //int x,int y规定了输入的形式参数的类型应该是整形
{
int z = 0;
z = x + y;
return z;
}这个函数的作用就是计算两数之和。
写好这个函数以后,若调用这个函数,函数就会计算所输入的两个值之和,然后返回给主调函数
知识点:
(1)ret_type(返回类型)
ret_type指返回类型(即函数计算结果的类型,如:int 、double···;也可以是void,表示什么都不返回)
· 下面对函数的返回值进行解释说明:
从是否有返回值的情况,函数可分为:有返回值函数和无返回值函数
有返回值函数:这类函数在执行完以后,会通过return语句向调用者返回一个执行结果
无返回值函数:这类函数只是把函数体执行完,然后继续执行程序后面的语句,并不会向调用者返回任何值
(2) return语句
功能:计算表达式的值,并返回给主函数
① return语句后面可以是数值也可以是表达式,如果是表达式,则先计算表达式,再返回
② 若return语句返回的值和函数的返回类型不一样,系统会将返回的值转换成函数的返回类型
③ return语句执行后,函数是彻底返回(不会在执行后面的语句)
④ 当函数存在分支语句,则要保证每种情况下都有return返回
⑤ 当返回类型是void这种不需要返回的,可以省略return,或者return语句后面不跟表达式
(3)形式参数和实际参数
形式参数:是在定义函数时确定的,只能是变量,只有在被调用时才分配内存单元,在调用结束后,立刻释放所分配的内存单元。
实际参数:可以是常量,变量,表达式,函数值等。在函数调用时,它们必须要有确定的值,以便把这些值传递给形参。
实参数值的传递要注意:
1,实参和形参在数量上,顺序上要严格保持一致
2,实参和形参的数据类型必须兼容,并且以形参的数据类型为主
关于形参内存分配的理解:
请看下面的代码:
函数swap的作用是交换a,b的值,可是为什么最后打印出的结果却还是10,20呢?
这里我们就要理解一下形参的内存分配和实参的内存分配的区别:
(1)int a,b时:a,b作为实参在创建时是直接分配了内存空间
(2)到调用 swap(a,b)这时候是把实参a,b的值传递给形参(也就是传递给函数()里面 的变量),形参得到值才会分配新的空间,并且这个内存空间和函数外实参的空间是不一样的
(3)最后在函数执行完以后,形参a,b的内存空间被释放
所以,从始至终,函数并没有对函数外的实参进行操作,函数改变的只是附有实参的数值的形参。
三,函数的调用
我们继续用这个图来解释:
调用格式
函数名(实际参数列表); //分号不能省
如上图,调用swap函数:
swap(a,b);
说明:
1,无参数函数调用时,没有实参列表
2,实参列表中的参数(即实参)可以是变量,常量和表达式
3,实参之间用逗号隔开
4,在C语言中,出了main函数,其余的函数调用前要有函数声明(原型)
函数声明
ret_type name(形式参数);
如上图若要声明swap函数:
void swap(int x,int y);
注意:上图中使用swap函数时没有声明是因为:上述的程序中函数的实现在前,而函数的实现属于特殊的声明
函数的嵌套调用
C语言中的函数之间都是平行的,不分上下级。因此不能在一个函数里定义另一个函数,但是可以在定义函数的时候调用其他函数。
下面对函数的嵌套调用进行举例:
这个程序中有三个函数main(),fac(),comb(),他们之间的嵌套关系如下:
在main函数中调用了comb函数来进行分式计算;在comb函数中又调用了fac函数来计算n!,m!和(n-m)!
时光总是这么快,一下就看到结尾啦!
🌈我的分享也就到此结束啦🌈
要是我的分享也能对你的学习起到帮助,那简直是太酷啦!
若有不足,还请大家多多指正,我们一起学习交流!嘿嘿,王子,公主请一键三连!(✪ω✪)
感谢大家的观看和支持!最后,☺祝愿大家天天开心!!!
开心是一天,不开心也是一天,为什么不开开心心的过好每一天呢!!!
相关文章:

C语言——函数
导读 : 这篇文章主要讲解一下C语言函数的一些基本知识。 前言:函数的概念 C语言中的函数又常常被称为子程序,是用来完成某项特定的工作的一段代码。就像我们生活中的模块化建造技术,类比模块化建房子的过程:整个程序…...

DDR SDRAM 学习笔记
一、基本知识 1.SDRAM SDRAM : 即同步动态随机存储器(Synchronous Dynamic Random Access Memory), 同步是指其时钟频率与对应控制器(CPU/FPGA)的系统时钟频率相同,并且内部命令 的发送与数据传输都是以该时钟为基准…...

RocketMQ(4.9.4)学习笔记 - 安装部署
单机部署: 官网文档地址: https://rocketmq.apache.org/zh/docs/4.x 参考文档: windows安装RocketMQ_rocketmq windows_book多得的博客-CSDN博客 下载地址: https://archive.apache.org/dist/rocketmq/4.9.4/rocketmq-all-4.9.…...

虚拟局域网
虚拟局域网(VLAN) VLAN建立于交换技术的基础之上 广播域(broadcast domain):其中任何一台设备发出的广播通信都能被该部分网络中的所有其他设备所接收,这部分网络就叫广播域利用以太网交换机可以很方便地实现虚拟局域网VLAN(Virtual LAN)对于一个主机和…...

【PG】PostgreSQL 预写日志(WAL)、checkpoint、LSN
目录 预写式日志(WAL) WAL概念 WAL的作用 WAL日志存放路径 WAL日志文件数量 WAL日志文件存储形式 WAL日志文件命名 WAL内容 检查点(checkpoint) 1 检查点概念 2 检查点作用 触发检查点 触发检查点之后数据库操作 设置合…...

一文了解VR全景拍摄设备如何选择,全景图片如何处理
引言: 在如今的数字化时代,虚拟现实(VR)技术不仅为我们的生活增添了许多乐趣,也为摄影领域带来了新的摄影方式,那么VR全景拍摄如何选择设备,全景图片又怎样处理呢? 一. VR全景拍摄设…...
Linux下docker安装mysql8.0
下载mysql8.0docker镜像 docker pull mysql:8.0 查看下载的docker镜像 docker images创建挂载目录 mkdir -p /data/mysql/conf mkdir -p /data/mysql/data mkdir -p /data/mysql/logs运行 docker run -p 3306:3306 --name mysql --restartalways --privilegedtrue \ -v /da…...
C++ std::make_unique和std::make_shared用法
std::make_unique 和 std::make_shared 是 C++11 引入的两个辅助函数,用于创建动态分配的智能指针 std::unique_ptr 和 std::shared_ptr,分别帮助避免了显式使用 new 和 delete,从而提高代码的安全性和可读性。 std::make_unique: #include <memory>int main() {// …...

【Redis】list列表
上一篇: String 类型 https://blog.csdn.net/m0_67930426/article/details/134362606?spm1001.2014.3001.5501 目录 Lpush LRange Rpush Lpop Rpop Lindex Ltrim Lset 列表不存在的情况 如果列表存在 Linsert 编辑 在………之前插入 在……后面插入…...

树莓派安装ubuntu系统
准备工作: 1.树莓派官方烧录工具,raspberry pi imager下载链接Raspberry Pi OS – Raspberry Pi 2.下载ubuntu镜像文件,下载链接Install Ubuntu on a Raspberry Pi | Ubuntu 打开imager软件,操作系统选择自定义镜像,…...

绩效管理系统有哪些?
绩效管理系统有哪些? 把绩效管理系统按照两大指标分类—— 按地域划分(主要看兼容性和稳定性)按照功能性质划分(主要看实用性和拓展性) 按照以上两个维度,我们可以简单把绩效管理系统分为4大不同类型——…...
Three.js学习记录
下载并安装...

CTFhub-RCE-远程包含
给咱一个phpinfo那么必然有他的道理 PHP的配置选项allow_url_include为ON的话,则include/require函数可以加载远程文件,这种漏洞被称为"远程文件包含漏洞(Remote File Inclusion RFI)"。 allow_url_fopen On 是否允许打开远程文件 allow_u…...

云流量回溯的重要性和应用
云流量回溯是指利用云计算和相关技术来分析网络流量、数据传输或应用程序操作的过程。这个过程包括了对数据包、通信模式和应用程序性能的审查和跟踪。本文将介绍云流量回溯重要性和应用! 1、网络安全: 云流量回溯是网络安全的重要组成部分。通过监测和回溯网络流量,…...
JVM之垃圾回收
1. 如何判断对象可以回收 1.1 引用计数法 引用计数法是一种内存管理技术,其中每个对象都有一个与之关联的引用计数。引用计数表示当前有多少个指针引用了该对象。当引用计数变为零时,表示没有指针再指向该对象,该对象可以被释放,…...

人工智能基础_机器学习026_L1正则化_套索回归权重衰减梯度下降公式_原理解读---人工智能工作笔记0066
然后我们继续来看套索回归,也就是线性回归,加上了一个L1正则化对吧,然后我们看这里 L1正则化的公式是第二个,然后第一个是原来的线性回归,然后 最后一行紫色的,是J= J0+L1 对吧,其实就是上面两个公式加起来 然后我们再去看绿色的 第一行,其实就是原来线性回归的梯度下降公式…...
ubuntu xrdp远程登录一直弹出Authentication required. System policy prevents WiFi scans
windows远程登录以后想要连接一下wifi,一定弹出Authentication required,关都关不掉,wifi也连不上。 使用以下方法后完美解决 sudo vi /etc/polkit-1/localauthority/50-local-d/network.pkla 加入如下内容: [Allow Wifi Scan…...

【Python】基础练习题_ 函数和代码复用
(1)编写一个函数,输入n为偶数时,调用函数求1/21/4…1/n,当输入n为奇数时,调用函数1/11/3…1/n。 def calculate_sum(n):total_sum 0if n % 2 0: # n为偶数for i in range(2, n1, 2):total_sum 1 / ielse: # n为奇…...
Java中的ClassLoader是什么?有哪些常见的ClassLoader?
在Java中,ClassLoader是一个抽象类,它的主要任务就是将class文件加载到JVM虚拟机中去以便程序可以正确运行。一般来说,Java程序在编写完成后是以.java的文件存在磁盘上,然后通过编译器将其编译成.class文件(字节码文件…...

vim批量多行缩进调整
网上其他教程: ctrl v 或者 v进行visual模式按方向键<,>调整光标位置选中缩进的行Shift > (或者 Shift < )进行左右缩进。 我只想说,乱七八糟,根本不管用 本文教程: 增加缩进…...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造,完美适配AGV和无人叉车。同时,集成以太网与语音合成技术,为各类高级系统(如MES、调度系统、库位管理、立库等)提供高效便捷的语音交互体验。 L…...
synchronized 学习
学习源: https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖,也要考虑性能问题(场景) 2.常见面试问题: sync出…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

基于当前项目通过npm包形式暴露公共组件
1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹,并新增内容 3.创建package文件夹...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题
在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件,这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下,实现高效测试与快速迭代?这一命题正考验着…...
python报错No module named ‘tensorflow.keras‘
是由于不同版本的tensorflow下的keras所在的路径不同,结合所安装的tensorflow的目录结构修改from语句即可。 原语句: from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后: from tensorflow.python.keras.lay…...

Linux 内存管理实战精讲:核心原理与面试常考点全解析
Linux 内存管理实战精讲:核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用,还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...

Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战
说明:这是一个机器学习实战项目(附带数据代码文档),如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下,风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...
QT3D学习笔记——圆台、圆锥
类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体(对象或容器)QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质(定义颜色、反光等)QFirstPersonC…...