☆ 函数

在前面我们已经讲过了一些简单的函数,如程序的主函数main()、标准输出函数printf()。在C语言中,大多数功能都是依靠函数来实现的。But,你知道什么是函数吗?我猜你肯定不知道。

那么今天我们来仔细的讲解一下什么是函数,函数的定义、内部函数与外部函数等相关知识。

 

☆ 函数的定义

假设有一个射击游戏程序,程序在运行过程中,要不断地发射子弹打死怪物。Biu!Biu!Biu!

假设发射子弹的代码有100行,如果说我每射击一次就要写这100行代码一次,那么可能现在的程序员哥哥都已经累死在电脑桌前了。即便没累死,这样写出来的程序也会从几十KB变成几百M,同时维护这些程序代码的程序员哥哥看到游戏连续射击时代码量的时候,也会果断的拔出菜刀砍死你。

 

那该怎么办呢?为了解决【重复编写代码】这个问题,我们可以把发射子弹这部分的代码给单独拿出来放在一个{ }中,并为这段代码起个名字。这样,每次我们需要发射子弹的时候,通过这个名字来调用发射子弹的代码块就可以了,而不是发射一次就编写一次射击动作。是不是感到很惊奇?

而这上面我们所提取并组合起来的代码块可以被看作是程序中自己定义的一个函数,玩游戏时,在需要发射子弹的地方调用这个函数就可以了。

在C语言中,定义一个函数的具体语法格式如下:

返回值类型函数名([[参数类型参数名1],[参数类型参数名2],……,[参数类型 参数n]])

{

执行语句

………

return 返回值;

}

✿ 返回值类型:用于限定函数返回值的数据类型;

✿ 函数名:表示函数的名称,该名称可以根据标识符命名规范来定义;

✿ 参数类型:用于限定调用方法时传入参数的数据类型;

✿ 参数名:用于接收调用方法时传入的数据;

✿ return关键字:用于结束函数,并返回函数指定类型的值;

✿ 返回值:被return语句返回的值,该值会返回给调用者。如果函数没有返回值,则返回值类型要声明为void,此时,函数体中的return语句可以省略不写。

在上面的语法格式中,函数中的“[[参数类型参数名1],[参数类型参数名2],...…,[参数类型 参数n]]”被称作参数列表,它主要是用来描述函数在被调用时需要接收的参数。

如果你的函数不需要接收任何参数,那么设置参数列表为空就好了,这样的函数被称为无参函数。相反地,参数列表不为空的函数就是有参函数。接下来分别讲解这两种函数。

1、无参函数

在C语言中,无参函数的定义很简单,先来看一个定义无参函数的示例代码,具体如下:

void func()

{

printf("这是我的第一个函数! ");

}

在这个示例代码中,func()函数就是一个无参函数,在定义时参数列表为空。要想执行这个函数,需要在main()函数中调用它。

案例1:

#include

void func(int x, int y)

{

int sum = x + y;

printf("x+y=%d ", sum);

}

void main()

{

func(3, 5);

}

运行结果:

 

在这个程序中,第2~6行代码定义了一个函数func(),这个函数包含两个参数,分别是x和y。当在main()函数中调用func()函数时,由于传入的参数是3和5,因此,程序打印的结果为“x+y=8”。下面通过一张图来描述func()函数的调用过程。

 

从图中可以看出,有参函数和无参函数的调用过程类似,只不过在调用有参函数时,需要传入实参,并将传入的实参赋值给形参,然后在函数体中执行x+y操作,最终将结果输出到控制台。

值得一提的是,在定义有参函数时指定的参数x和y是形式参数,简称形参,它们只在形式上存在,并不是真正存在的参数。调用函数时传入的参数(如案例中的3和5)是实际参数,简称实参,与形参相对,实参则是指实际存在的参数。

2、函数的返回值

了解了函数之后我们会发现,其实函数的返回值是指函数被调用之后,返回给调用者的值。

函数返回值的具体语法格式如下:

              return 表达式;

对于返回值为空的函数,可以直接在return语句后面加分号,具体语法格式如下:

              return;

为了让大家更好的理解如何使用return语句,接下来对案例1进行改写,使func(int x, int y)函数能够返回求和计算的结果。

案例2:

#include
int func(int x, int y) { int sum = x + y; return sum; } void main() { int sum = func(3, 5); printf("x+y=%d ", sum); }

运行结果:

 

从图中可以看出,案例1与案例2实现了同样的功能。接下来通过一个图例来演示func()函数的整个调用过程以及return语句的返回过程,如下图所示。

 

从图中可以看出,在程序运行期间,参数x和y相当于在内存中定义的两个变量。当调用func(int x,int y)函数时,传入的参数3和5分别赋值给变量x和y,并将x+y的结果通过return语句返回,整个方法的调用过程结束,变量x和y被释放。

需要注意的是,return后面表达式的类型和函数定义返回值的类型应保持一致。如果不一致,就有可能会报错。如果函数没有返回值,返回值类型要声明为void。为了保证程序的可读性和逻辑性,没有返回值的函数都应定义为void。


今天的编程知识分享就到这里,消化一下,坚持每天学会编程,下一个程序员就是你!

学C/C++不易,此路应携手前行。

欢迎关注我的编程公众號【草莓味狸猫】!

如果你想跟着小编一起学编程的话!

可以来我的C语言C++编程学习基地,【点击进入】

还有(源码,零基础教程,项目实战教学视频)!

 

【C语言编程入门】Do you know 函数?不知道了吧,我来告诉你!的更多相关文章

  1. 编程入门python之定义函数【转】

    编程入门python之定义函数 零基础学编程by学哥 2017-02-06 10:51 今天讲python函数. 输入参数求三角形或圆形或长方形的面积 先输入1个参数:形状类型 1=三角形 2=圆形 ...

  2. 【C语言编程入门笔记】C语言果然博大精深!函数还分内部和外部?

    ۞ 外部函数与内部函数 前面我们讲解了关于函数的调用都是针对同一个源文件中其他函数进行调用的,而在有些情况下,函数也可以对另外一个源文件中的函数进行调用.当一个程序由多个源文件组成时,根据函数是否能被 ...

  3. linux 操作系统下c语言编程入门

    2)Linux程序设计入门--进程介绍 3)Linux程序设计入门--文件操作 4)Linux程序设计入门--时间概念 5)Linux程序设计入门--信号处理 6)Linux程序设计入门--消息管理  ...

  4. C语言编程入门之--第四章C语言基本数据类型

      导读:C语言程序中经常涉及一些数学计算,所以要熟悉其基本的数据类型.数据类型学习起来比较枯燥,不过结合之前的内存概念,以及本节的字节概念,相信数据类型也就不难理解了.本章从二进制的基本概念开始,然 ...

  5. [转] linux操作系统下c语言编程入门--基础知识

    点击阅读原文 这篇文章介绍在LINUX下进行C语言编程所需要的基础知识.在这篇文章当中,我们将会学到以下内容: 1. 源程序编译        2. Makefile的编写        3. 程序库 ...

  6. C语言编程入门之--第一章初识程序

    第一章 初识程序 导读:计算机程序无时不刻的影响着人类的生活,现代社会已经离不开程序,程序的作用如此巨大,那么程序到底是什么呢?本章主要讨论程序的概念,唤起读者对程序的兴趣,同时对C语言程序与其它语言 ...

  7. C语言编程入门之--第三章编写第一个C语言程序

    第三章 编写第一个C语言程序 导读:一般学一门计算机语言的第一堂上机课(“上机”顾名思义,上了计算机),就是往屏幕输出“hello world”,本章也不例外. 1.1 Hello,World! 这一 ...

  8. Unix/Linux环境C编程入门教程(31) 数学函数带你战胜企业面试

    1.函数介绍: abs()acos()asin()atan()atan2()ceil()cos()cosh()exp()frexp()ldexp()log()log10()pow()sin()sinh ...

  9. go语言编程入门

    查看文档 首先先分享一个可以在本地就能查看文档的骚操作(linux系统) 1.打开命令行终端,输入godoc -http=:8000,如果想后台运行在后面加个& 2.然后打开浏览器,输入网址: ...

随机推荐

  1. Fiddler的基本界面介绍

    前言 fiddler的界面,主要是分以下6个模块. 一:主菜单栏: 可以参考:https://www.cnblogs.com/sjl179947253/p/7620524.html 二:工具栏: 1. ...

  2. [LeetCode]1084. 销售分析III(Mysql,having+聚合函数)

    题目 Table: Product +--------------+---------+ | Column Name | Type | +--------------+---------+ | pro ...

  3. Hadoop入门学习整理(一)

    今天是2020年4月8日,是一个平凡而又特殊的日子,武汉在经历了77天的封城之后,于今日0点正式解封.从1月14日放寒假离开武汉,到今天已近3个月,学校的花开了又谢了.随着疫情好转,春回大地,万物复苏 ...

  4. hystrix讲解:熔断降级隔离以及合并请求

    对springcloud只是学习了基本的框架搭建,基本上看到的例子都是只使用了fallback 但是hystrix还有线程隔离和请求合并的能力  顺便吐槽   大部分人的博客例子估计都是听课的  应用 ...

  5. 虚拟机Ubuntu(18.04.2)下安装配置Hadoop(2.9.2)(伪分布式+Java8)

    [本文结构] [1]安装Hadoop前的准备工作 [1.1] 创建新用户 [1.2] 更新APT [1.3] 安装SSH [1.4] 安装Java环境 [2]安装和配置hadoop [2.1] Had ...

  6. Spring学习(二)Spring IoC 和 DI 简介

    一.IOC(控制反转) 定义:反转控制 (Inversion Of Control)的缩写,即创建对象的反转控制. 正向控制:若要使用某个对象,需要自己去负责对象的创建. 反向控制:若要使用某个对象, ...

  7. 刷题 [网鼎杯 2018]Fakebook

    解题思路 首先登陆页面发现是这样的: 查看源码 源码很正常,也没有什么特别的 web目录扫描 我用的是dirmap工具扫描,扫描结果保存在一个txt文件中,结果可知没什么后台. robots.txt ...

  8. MySQL中的临时表到底什么是?

    Author:极客小俊 一个专注于web技术的80后 我不用拼过聪明人,我只需要拼过那些懒人 我就一定会超越大部分人! CSDN@极客小俊,原创文章, B站技术分享 B站视频 : Bilibili.c ...

  9. 坚果云+svn实现异地非局域网个人代码版本管理

    原理大概是A地的设备作为服务端创建仓库,将仓库传上坚果云,同步到B地,再拉取仓库的代码

  10. spring初始(介绍、核心架构)

    1.spring介绍 Spring是个java企业级应用的开源开发框架.主要用来开发Java应用,但是有些扩展是针对构建J2EE平台的web应用.Spring框架目标是简化Java企业级应用开发,并通 ...