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)!


时光总是这么快,一下就看到结尾啦!

🌈我的分享也就到此结束啦🌈
要是我的分享也能对你的学习起到帮助,那简直是太酷啦!
若有不足,还请大家多多指正,我们一起学习交流!

嘿嘿,王子,公主请一键三连!(✪ω✪)

感谢大家的观看和支持!最后,☺祝愿大家天天开心!!!

           开心是一天,不开心也是一天,为什么不开开心心的过好每一天呢!!! 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

快速掌握队列的基础知识

目录 队列的特点基于链表实现队列用栈实现队列用队列实现栈 队列是一种线性数据结构&#xff0c;它只允许在一边进行插入操作&#xff08;队尾&#xff09;&#xff0c;另一边进行删除操作&#xff08;队头&#xff09;。插入操作称为入队&#xff0c;删除操作称为出队。队列遵…

数据分类分级方法及典型应用场景

1 2021-09-29 来源&#xff1a;数据学堂 [打印本稿][字号 大 中小] 《数据安全法》的第二十一条明确规定了由国家建立数据分类分级保护制度&#xff0c;根据数据在经济社会发展中的重要程度&#xff0c;以及一旦遭到篡改、破坏、泄露或者非法获取、非法利用&#xff0c;对国…

ISP 处理流程

#灵感# 摆烂时间太长了&#xff0c;感觉知识忘光光了。重新学习&#xff0c;常学常新。 因为公司文档都不让摘抄、截取&#xff0c;所以内容是工作的一些自己记录和网络内容&#xff0c;不对的欢迎批评指正。 1、ISP概述 ISP是Image Signal Processor 的简称&#xff0c;也就…

Python---综合案例:通讯录管理系统---涉及点:列表、字典、死循环

需求&#xff1a; 开个一个通讯录的管理系统&#xff0c;主要用于实现存储班级中同学的信息&#xff08;姓名、年龄、电话&#xff09; 涉及点&#xff1a;列表、字典、死循环 相关链接&#xff1a;Python--列表及其应用场景---增、删、改、查。-CSDN博客 Python---字典---…

回顾 — SFA:简化快速 AlexNet(模糊分类)

模糊图像的样本 一、说明 在本文回顾了基于深度学习的模糊图像分类&#xff08;SFA&#xff09;。在本文中&#xff1a;Simplified-Fast-AlexNet (SFA)旨在对图像是否因散焦模糊、高斯模糊、雾霾模糊或运动模糊而模糊进行分类。 二、大纲 图像模糊建模简要概述简化快速 AlexNet…

Model Inspector—软件模型静态规范检查工具

产品概述 Model Inspector&#xff08;MI&#xff09;原厂商是韩国Suresoft&#xff0c;是KOLAS国际公认测评机构&#xff0c;旨在提升安全关键领域软件可信度。MI用于开发过程中模型的静态检查&#xff0c;包括规范检查、复杂度度量&#xff0c;提供MAAB、HIS、CG、MISRA_AC_…

MCU通过KT6368A用SPP透传发送1K左右的数据,手机APP显示是3个包或者4个包,但是我看手册说最大一个包是512,理论应该是两个包吧,请问这正常吗?

一、问题简介 MCU通过KT6368A用SPP透传发送1K左右的数据&#xff0c;手机APP显示是3个包或者4个包&#xff0c;但是我看手册说最大一个包是512&#xff0c;理论应该是两个包吧&#xff0c;请问这正常吗&#xff1f; 详细说明 实际测试的截图如下&#xff1a;使用的是安卓app…

【MySQL】库的相关操作 + 库的备份和还原

库的操作 前言正式开始创建数据库删除数据库编码集查看系统默认字符集以及校验规则字符集校验规则 所有支持的字符集和校验规则所有字符集所有校验规则 指明字符集和校验规则创建数据库相同的字符集用不同的校验规则读取会出现什么情况 alter修改数据库show create databasealt…

深入理解Kafka3.6.0的核心概念,搭建与使用

Kafka是最初由Linkedin公司开发&#xff0c;是一个分布式、支持分区的&#xff08;partition&#xff09;、多副本的&#xff08;replica&#xff09;&#xff0c;基于zookeeper协调的分布式消息系统&#xff0c;它的最大的特性就是可以实时的处理大量数据以满足各种需求场景&a…

OpenMMlab导出yolov3模型并用onnxruntime和tensorrt推理

导出onnx文件 直接使用脚本 import torch from mmdet.apis import init_detector, inference_detectorconfig_file ./configs/yolo/yolov3_mobilenetv2_8xb24-ms-416-300e_coco.py checkpoint_file yolov3_mobilenetv2_mstrain-416_300e_coco_20210718_010823-f68a07b3.pth…

跨境电商源码:多语言支持与扩展的终极解决方案

随着全球电商市场的不断扩大&#xff0c;跨境电商源码的需求日益增长。对于想要拓展国际业务的电商企业来说&#xff0c;多语言支持显得尤为重要。在这方面&#xff0c;我们的跨境电商源码产品具备显著优势&#xff0c;不仅全面支持多语言&#xff0c;还方便扩展多个语言的CSDN…

PP-ChatOCRv2、PP-TSv2、大模型半监督学习工具...PaddleX新特性等你来pick!

小A是一名刚刚毕业的算法工程师&#xff0c;有一天&#xff0c;他被老板安排了一个活&#xff0c;要对一批合同扫描件进行自动化信息抽取&#xff0c;输出结构化的分析报表。OCR问题不大&#xff0c;但是怎么进行批量的结构化信息抽取呢&#xff1f;小A陷入了苦苦思索... 小B是…

【06】VirtualService高级流量功能

5.3 weight 部署demoapp v10和v11版本 --- apiVersion: apps/v1 kind: Deployment metadata:labels:app: demoappv10version: v1.0name: demoappv10 spec:progressDeadlineSeconds: 600replicas: 3selector:matchLabels:app: demoappversion: v1.0template:metadata:labels:app…

数据结构:红黑树的原理和实现

文章目录 红黑树的概念红黑树的性质红黑树的模拟实现红黑树的平衡问题 整体实现和测试 本篇用于进行红黑树的拆解和模拟实现&#xff0c;为之后的map和set的封装奠定基础 红黑树的概念 红黑树也是一种二叉搜索树&#xff0c;但是在每一个节点的内部新增了一个用以表示该节点颜…

【python自动化】Playwright基础教程(八)鼠标操作

【python自动化】Playwright基础教程(八)鼠标操作 本文目录 文章目录 【python自动化】Playwright基础教程(八)鼠标操作playwright系列回顾前文代码click模拟鼠标点击dblclick模拟鼠标双击down模拟鼠标按下move模拟鼠标移动up模拟鼠标释放wheel模拟鼠标滚动鼠标长按常用实战引…

mysql数据库可以执行定时任务

在一些业务需要中&#xff0c;经常需要一些定时任务。如Java的schedule&#xff0c;nodejs的node-schedule等。今天第一次接触了使用数据库的存储过程来执行定时任务。 本篇文章以MySQL数据库为例&#xff0c;介绍通过数据库设置定时任务的方法。本文中以介绍操作过程为主&…

三数之和问题

题目描述 给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满足 nums[i] nums[j] nums[k] 0 。请你返回所有和为 0 且不重复的三元组。 注意&#xff1a;答案中不可以包含重复的三元组。…

asp.net core mvc之 布局

一、布局是什么&#xff1f; 布局是把每个页面的公共部分&#xff0c;提取成一个布局页面&#xff08;头、导航、页脚&#xff09;。 二、默认布局 _Layout.cshtml 默认的布局是在 /Views/Shared 目录的 _Layout.cshtml文件。通常Shared目录中的视图都是公共视图。该目录下的…

瑞利长度(Rayleigh length)

瑞利长度 Rayleigh length 在光学&#xff0c;特别是激光学中&#xff0c;我们设鞍腰部&#xff08;如图中所示的最低处&#xff09;为A&#xff0c;其横截面面积为a&#xff0c;沿光的传播方向&#xff0c;当横截面面积因为散射达到2a时&#xff0c;我们设此处为B&#xff0c;…

二维码智慧门牌管理系统升级解决方案:运营可视化之道

文章目录 前言一、系统概述二、数据可视化与运营决策 前言 随着科技的飞速发展和人们生活水平的提高&#xff0c;传统的门牌管理系统已经无法满足现代社会的需求。在这个信息化、智能化的时代&#xff0c;一款升级版的二维码智慧门牌管理系统应运而生&#xff0c;它将以全新的…