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


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

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

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

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

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

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

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

相关文章

高校大学校园后勤移动报修系统 微信小程序uniapp+vue

本文主要是针对线下校园后勤移动报修传统管理方式中管理不便与效率低的缺点&#xff0c;将电子商务和计算机技术结合起来&#xff0c;开发出管理便捷&#xff0c;效率高的基于app的大学校园后勤移动报修app。该系统、操作简单、界面友好、易于管理和维护&#xff1b;而且对后勤…

Python中类的定义和使用细讲

文章目录 前言一、定义类二、创建类的实例三、创建 _ _ init _ _() 方法四、创建类的成员并访问1. 创建实例方法并访问2. 创建数据成员并访问 五、访问限制 前言 在 Python 中&#xff0c;类表示具有相同属性和方法的对象的集合。在使用类时&#xff0c;需要先定义类&#xff0…

Android安卓设置跳转默认应用商店为Google Play 链接跳转到谷歌商店临时解决方法

手机链接默认不跳转 Google Play 因为大部分安卓厂商系统都根据了自己的需求进行了修改,就成为了系统级导流,想要彻底解除可刷写国际版等原生系统即可恢复 解决方法 使用冻结软件(例如 爱玩机手机助手(root)等应用)对 应用商城 进行临时冻结,如需保证正常使用解除冻结状态即可…

清分系统对账

流程1的问题&#xff1a; 1、通道一天的数据会有多少&#xff0c;有二三十万条交易数据吗&#xff1f; 2、如果数据过大都存到一个Map里面去&#xff0c;机器不得挂了 步骤1总结&#xff1a; 1、通过channelNo获取通道T的数据&#xff0c;因为通道是一天一个文件给过来。在转…

首届教师案例教学竞赛一等奖作品上线至和鲸社区,快来学习!

细心的朋友可能已经发现&#xff0c;近期和鲸社区的频道页上线了一个新专区——“优秀参赛作品专区”。 图.和鲸社区频道页 迄今为止&#xff0c;和鲸参与/支持了 500 多场专业数据科学竞赛&#xff0c;包括面向气象、金融、医学、海洋等不同领域的&#xff0c;面向从业者、科学…

.net 8 发布了,试下微软最近强推的MAUI

先看下实现的效果&#xff1a; 下面发下XAML文件&#xff1a; <?xml version"1.0" encoding"utf-8" ?> <ContentPage xmlns"http://schemas.microsoft.com/dotnet/2021/maui"xmlns:x"http://schemas.microsoft.com/winfx/2009/…

案例027:基于微信小程序的校园二手平台的设计与实现

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;SSM JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder X 小程序…

基于springboot实现智慧党建系统项目【项目源码】

基于springboot实现智慧党建系统演示 Java技术 Java是由Sun公司推出的一门跨平台的面向对象的程序设计语言。因为Java 技术具有卓越的通用性、高效性、健壮的安全性和平台移植性的特点&#xff0c;而且Java是开源的&#xff0c;拥有全世界最大的开发者专业社群&#xff0c;所以…

C++ libcxxabi中dynamic_cast 实现

摘要&#xff1a;最近在看一个崩溃的过程中详细看了一遍cxxabi的定义&#xff0c;就想着看一些llvm中cxxabi的一些实现。本文描述了cxxabi中dynamic_cast的实现以及原理。   关键字&#xff1a;cxxabi,dynamic_cast 1 简介 C中&#xff0c;dynamic_cast用于有虚函数的继承链…

【go入门】表单

4.1 处理表单的输入 先来看一个表单递交的例子&#xff0c;我们有如下的表单内容&#xff0c;命名成文件login.gtpl(放入当前新建项目的目录里面) <html> <head> <title></title> </head> <body> <form action"/login" meth…

【Java】循环语句练习

文章目录 1. 计算5的阶乘2. 计算 1! 2! 3! 4! 5!3. 数字9 出现的次数4. 判定素数5. 求1-100之间的素数6. 求2个整数的最大公约数7. 计算分数的值8. 模拟登陆9. 输出乘法口诀表10. 求出0&#xff5e;999之间的所有“水仙花数”并输出11. 猜数字游戏&#x1f648; 1. 计算5的…

Linux系统编程 day05 进程控制

Linux系统编程 day05 进程控制 1. 进程相关概念2. 创建进程3. exec函数族4. 进程回收 1. 进程相关概念 程序就是编译好的二进制文件&#xff0c;在磁盘上&#xff0c;占用磁盘空间。程序是一个静态的概念。进程即使启动了的程序&#xff0c;进程会占用系统资源&#xff0c;如内…

FO-like Transformation

参考文献&#xff1a; [RS91] Rackoff C, Simon D R. Non-interactive zero-knowledge proof of knowledge and chosen ciphertext attack[C]//Annual international cryptology conference. Berlin, Heidelberg: Springer Berlin Heidelberg, 1991: 433-444.[BR93] Bellare M…

软件介绍01- koodo Reader支持所有电脑平台!

1 软件简介 Koodo Reader软件是一款阅读器&#xff0c;可以阅读各种格式的文档。用来代替kindle。界面简洁&#xff0c;好看&#xff0c;阅读功能强大&#xff0c;而且可以多设备同步。 因为开源&#xff0c;所以免费。而且支持所有电脑平台&#xff01; 支持格式&#xff1a…

Android修行手册-ViewPager定制页面切换以及实现原理剖析

Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总游戏脚本-辅助自动化Android控件全解手册再战Android系列Scratch编程案例软考全系列Unity3D学习专栏蓝桥系列ChatGPT和AIGC &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分…

kafka的设计原理

文章目录 1 Kafka简介2 Kafka的架构2.1 Kafka 一些重要概念2.2 工作流程2.3 副本原理2.4 分区和主题的关系2.5 生产者2.5.1 分区可以水平扩展2.5.2 分区策略 2.6 消费者2.6.1 消费方式2.6.2 分区分配策略 2.7 数据可靠性保证2.7.1 副本数据同步策略2.7.2 ACK 应答机制2.7.3 可靠…

Java抽象类和接口(1)

&#x1f435;本篇文章将对抽象类和接口相关知识进行讲解 一、抽象类 先来看下面的代码&#xff1a; class Shape {public void draw() {System.out.println("画");} } class Cycle extends Shape {public void draw() {System.out.println("圆形");} } …

开发知识点-ArkTS-鸿蒙开发-Typescript

Typescript IED IED https://developer.harmonyos.com/cn/develop/deveco-studio/#download

打开CMD的六种方法,CMD快捷键,CMD命令大全及详解

目录 前言1. winR快捷键2、通过文本文档创建&#xff1b;3、通过C盘中的cmd.exe文件打开&#xff1b;4、创建快捷方式&#xff1b;5、通过PowerShell打开&#xff1b;6、通过文件夹导航栏打开&#xff1b; 前言 自己的电脑win键失灵了&#xff0c;想通过winR来调出cmd&#xff…

【Linux基础】Linux常见指令总结及周边小知识

前言 Linux系统编程的学习我们将要开始了&#xff0c;学习它我们不得不谈谈它的版本发布是怎样的&#xff0c;谈它的版本发布就不得不说说unix。下面是unix发展史是我在百度百科了解的 Unix发展史 UNIX系统是一个分时系统。最早的UNIX系统于1970年问世。此前&#xff0c;只有…