C语言入门基础学习函数?来看我就告诉你!

函数

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

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

1 . 函数的定义

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

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

小编给大家推荐一个学习氛围超好的地方,C/C++交流企鹅裙:870963251!适合在校大学生,小白,想转行,想通过这个找工作的加入。裙里有大量学习资料,有大神解答交流问题,每晚都有免费的直播课程

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

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

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

{

执行语句

………

return 返回值;

}

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

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

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

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

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

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

在上面的语法格式中,函数中的“[[参数类型参数名1],[参数类型参数名2],…,[参数类型 参数n]]”被称作参数列表,它主要是用来描述函数在被调用时需要接收的参数。如果你的函数不需要接收任何参数,那么设置参数列表为空就好了,这样的函数被称为无参函数。相反地,参数列表不为空的函数就是有参函数。接下来分别讲解这两种函数。

1、无参函数

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

void func()

{

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

}

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

案例1:

1 #include

1 void func(int x, int y)

2 {

3 int sum = x + y;

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

5 }

6 void main()

7 {

8 func(3, 5);

9 }

运行结果:

在这个程序中,第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:

1 #include

10 int func(int x, int y)

11 {

12 int sum = x + y;

13 return sum;

14 }

15 void main()

16 {

17 int sum = func(3, 5);

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

19 }

运行结果:

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

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

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

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Python

数据类型总结(二)(列表,元组,字典)

一.变量的赋值操作 x=1 a=10 b=10 # #链式赋值 a=b=c=d=e=f=10 print(a,b,c,d,e,f) #多元赋值 #方式一 x...

2988
来自专栏青玉伏案

在Objective-C中浅谈面向对象

  接触面向对象也有一段时间了,当时是通过C++学习的OOP,后来又接触到了PHP和Java。每种OOP的语言在面向对象上或多或少都会有不同的地方,现在在学习O...

1836
来自专栏keyWords

JavaScript之作用域和闭包

801
来自专栏我和PYTHON有个约会

15. 程序编程进阶:函数的返回值

函数中代码块执行的结果,如果我们后面的代码中需要用到,就需要函数返回我们执行的结果,就是需要返回值;

1122
来自专栏ml

初学java之异常类

1 //异常类 2 package st; 3 public class example_1 4 { 5 public static void...

3076
来自专栏司想君

JavaScript闭包,只学这篇就会了

昨天发的文章,排版出现了重大失误。让大家的眼睛受累了。今天再发一遍。 这篇文章使用一些简单的代码例子来解释JavaScript闭包的概念,即使新手也可以轻松参透...

2768
来自专栏JetpropelledSnake

Python入门之面向对象编程(一)面向对象概念及优点

本文分为如下几个部分 首先说明面向对象是什么,然后结合实际例子说明面向对象的如下几个优点 方便函数管理 数据封装 对象操作 最后总结一下面向对象的好处 概念...

3727
来自专栏锦小年的博客

python学习笔记6.1-类的认识

前言 都在说,在Python中“无所不对象”,是因为Python是一个面向对象的动态编程语言,因而它具有:多态(Polymorphism),继承(Inherit...

2255
来自专栏技术小站

(String)、toString、String.valueOf用法区别(转)

在Java项目的实际开发和应用中,常常需要用到将对象转为String这一基本功能。本文将对常用的转换方法进行一个总结。

1132
来自专栏java一日一条

JavaScript 函数式编程中的 curry 实现

最近在学习javascript函数式编程,对其中大名鼎鼎的curry十分感兴趣,curry函数可以接受一个函数,我们暂且称之为原始函数,返回的也是一个函数,柯里...

794

扫码关注云+社区