C语言常用的知识没多少之函数讲解

C语言可以实现很多的功能,这些功能都是用函数实现的,如同高中学过的y=f(x)一样。给定一个x,便能求出对应的y值。在此从自定义函数的声明、使用(调用)和常用的输入和输出函数。

函数的定义

自定义函数是根据自己想要实现的功能进行编写的。所以在使用之前需要描述它的功能是什么,即函数的定义。其形式是

返回类型 函数名(参数列表)

{

函数体;

}

返回类型是函数最后要返回的值,如同y=f(x)中的y。其类型与变量的数据类型一样。但是又多了一种类型,是无返回值的函数,其英文单词是void。函数返回的值使用return语句实现的。形式为

return 返回值;

返回值可以是变量、常量或表达式。要求其数值类型与定义时的一样,否则会报错或进行隐式类型转换。当函数遇到return语句的执行完后,后面的代码就不执行,直接跳到被调用函数的下一条语句。

函数名是函数的唯一标识,如同y=f(x)中的f。多个函数定义时,函数名不能相同,并且都要符合C语言标识符的要求。函数名可以与函数内部变量的名称一样,但一般不这样定义。

参数列表是传给函数的值,可以是一个或多个,如同y=f(x)中的x。参数列表我们成为虚参,而传递给参数的值为实参,及调用该函数时的参数为实参。参数列表的具体形式是

参数1类型 参数1名[,参数2类型 参数2名......]

参数类型是之前讲过的,参数名要符合C语言的标识符,每个参数之间要用逗号隔开。当没有一个参数时,可以用void表示。在参数列表中定义的参数可以在参数内部使用,并且初始值为调用时的实参的值,并且是一一对应的。参数列表的变量名与函数内部的变量名可以与其它函数的变量名一样。函数内部的变量称为局部变量。当函数被调用时,会在内存中开辟相应的存储空间,用来存储相应的变量。当函数被调用完后,会清除该空间的内容。所以函数在被调用完后也会清除相应的变量,只有被返回的值被保存。定义在函数外或main函数的称为全局变量,当程序被运行时就开始开辟相应的空间,当程序执行完后才清除相应的空间。各个函数都可以调用定义在函数(包括main函数)外部的全局变量,但要求该变量的定义在函数定义的前面。当全局变量的名和局部变量的名一样时,调用的是局部变量。

函数体是实现函数功能的部分,其内容根据自己要实现的功能进行编写。好的自定义函数不仅函数名与函数要执行的功能一样或相近,而且函数体的代码量简洁、容易等。

函数之间可以相互调用,也可以调用自身。但是被其它函数调用时不能再调用其函数,调用自身除外。不断调用自身的函数可以实现递归的算法,这个在C语言函数举例中讲解。

函数的使用(调用)

函数的调用最好在函数声明的后面进行,否则还得进行函数的声明,即在文件的开头需要告诉编译器本文件有什么函数,形式是

返回类型 函数名(参数列表);

函数的调用的形式是

函数名(实参列表);

如果是有返回值的函数,其形式是

接收返回值的变量=函数名(实参列表);

需要注意的是接收返回值的变量与返回值的数据类型要相同,否则会进行隐式类型转换。

实参列表要与函数定义时的参数列表的个数相同、数据类型一一对应。实参传递的是数值,而不是地址。所以实参传过去的变量的值再被传递函数中无论如何进行其它的赋值,都不会影响实参的值,即使实参和形参的变量名一样。当传递的是变量的地址时,才会改变实参的值,但这个涉及C语言指针的内容,而其内容不仅多,而且还很难。所以不讲该部分的知识,有兴趣的可以参考相关书籍。

输入函数scanf

输入函数是从键盘等输入工具中获取人为输入的数据。其函数名为scanf,定义在stdio.c中,用#include <stdio.h>语句就可以使用该函数的功能,从键盘中获取相应的数值。

scanf函数的使用形式是

scanf("%x,%x......",&变量名1,&变量名2......);

%x是格式控制字符,其常见的有

%d 获取一个整数值(数据类型为int、short等)

%ld 获取一个整数值(数据类型为long)

%lf 获取一个小数(数据类型为double)

%f 获取一个小数(数据类型为float)

%c 获取一个字符(数据类型为char)

%s 获取一个字符串(数据类型为char[],下一文章讲解)

在调用scanf函数时,是将键盘输入的值按scanf中双引号的形式进行排列。当遇到%x(x为d或ld、lf、f、c、s)时查看当前的值是什么,直到遇到非格式控制字符(如空格或形式中的逗号)为该值的结尾,将其值赋给后面的变量。从键盘中获取到的值与双引号后面的变量一一对应。双引号中的格式控制字符要与后面的变量的数量相同、对应数据类型一样。省略号表示可以有多个变量同时通过键盘赋值;逗号为非格式控制字符,可以为空格等字符,是多个变量分隔的标志。如果没有逗号或空格等非格式控制字符的话,会让计算机很难分辨从键盘输入的值的大小。&字符可以按住Shift+7(键盘中横着数字的7,非矩阵中的7)打出,是地址运算符,涉及指针的知识,不再细讲。

输出函数printf

输出函数printf是将字符或变量的值输出到弹出窗口。printf函数的使用形式是

printf("%[n][.m]x......字符串",变量名......);

%x与输入的一样,在这里不再讲解。

[n][.m]是可选项,当要用到时方括号要去掉。n表示输出在弹出框中占用的长度;m表示输出小数后小数点的位数;省略号表示一次可以输出多个变量;字符串可以表示输出信息的提示,前后都可以添加。后面的变量名与前面的%一一对应。与输入函数不一样的是,输出函数的变量前没有地址运算符。

最后说几个常用的转义字符\n和\t。\n在输出函数中表示换一行,一般又在一行信息输出完后;\t表示空几个空格,没有任何的信息,一般为8个。

如果有问题的可以在公众号回复栏中写出问题描述发给我,我看到的话会进行相应的回复。如果发现文章有问题,也欢迎在公众号回复栏中提问,我会查阅资料进行确认并做出修改和回复。

既然阅读了本篇文章,顺便点一下右下边的在看按钮。

本文分享自微信公众号 - IT界的小白帽(l1084504793)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-07-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Rust语言学习交流

从Rust到远方:C星系

来源:https://mnt.io/2018/09/11/from-rust-to-beyond-the-c-galaxy/

17820
来自专栏诸葛青云的专栏

C语言应该怎么学,看看计算机类的学生给的建议

近十年来,它在编程语言排行榜(TIOBE)稳居前三。因此,C语言绝对是值得初学者学习的一门语言。笔者从事C语言教学十多年的经验来看,有以下一些建议可供C语言初学...

14220
来自专栏程序员周同学

【数据结构】线性表的顺序储存结构

1.写在前面1.C语言关键词---typedef3.线性表的特点4.线性表的顺序表示5.线性表的顺序表示(顺序表)结构

8310
来自专栏休辞醉倒

关于顺序表的C语言实现

严蔚敏老师的教材里用到引用传值,纯C语言无法实现,只能用CPP文件去编译,为此,特意将引用传值改为了指针作为参数。上例实现了创建、初始化、插入的封装。

36030
来自专栏洛米唯熊

Centreon v19.04远程执行代码漏洞

Centreon是一个免费的开源基础设施监控软件,Centreon允许系统管理员从集中式Web应用程序监控其基础设施,Centreon已成为欧洲企业监控...

20330
来自专栏程序员周同学

实训任务—二次幂的进阶表示

= 2(2(2)+2(1))+2(2(2))+2(2(1))+2(1)+2(0)

11850
来自专栏程序员周同学

实训任务——链表

链表操作是我们在学习过程中的一大难点,也是一个非常重要的知识点,因为在之后C语言学习的过程中,很多结构模式图都可以在链表的基础上进行延伸。在初次接触的时候,可...

9530
来自专栏程序员周同学

【数据结构】线性表的顺序表示

1.写在前面1.C语言关键词---typedef3.线性表的特点4.线性表的顺序表示5.线性表的顺序表示(顺序表)结构

10840
来自专栏python-爬虫

随机点名可视化界面,记录迟到人员,转exe文件

压缩文件下载链接:https://github.com/a568972484/Random_roll_call

7740
来自专栏休辞醉倒

浅析变长数组(VLA)和动态数组

前天实训听见几位推免的大佬聊面试中出现了动态数组,而我们所学并没有涉及到动态数组,遂翻起了尘封已久的《C语言程序设计现代方法》以及《C Primer Plus》...

13720

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励