广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >详解C语言初阶之函数
  • 545
分享到

详解C语言初阶之函数

2024-04-02 19:04:59 545人浏览 独家记忆
摘要

目录 1.main函数2.自定义函数2.1  函数的的封装和面向过程的思维3.函数的组成3.1函数的命名法3.2函数的返回值3.2.1void类型补充:3.3形参

 1.main函数

第一个函数是我们的main函数,它无处不在,main函数被称之为我们的入口函数,程序在运行时,从main函数进入,从main函数出来,main函数其实就是整个程序功能的集合,所有的功能必须被包含在main里面才可以被运行(预处理命令,宏定义,全局变量什么的当然要优先处理,再次不讨论这些)。我们看个例子吧

上图中,一个很简单的打印,却发现main函数之外的打印出现了错误,由此说明main的重要型。

     说白了,函数就是一个个功能的集合,内部也是一串串代码组成的程序,是程序的基本单元,又被叫作子程序,我们将函数分为库函数和自定义函数,再次我们主要了解自定义函数。

2.自定义函数

 所谓自定义函数,就是我们自己写的函数,我们自己设置了他们的功能,将他们进行封装,在某些时候进行调用。如:

在这里,我们把一个简单地加法运算进行了封装。只要在main函数里调用这个定义函数,我们即可实现加法的功能。

那么,有人问了,我们为什么非要写一个函数呢,看起来就很麻烦,直接写到main函数里不就行了吗?

2.1  函数的的封装和面向过程的思维

      实际上,我们在应用中不可能写如此简单的小程序,我们会写很长的代码(比如我们在刚刚的程序中加上减法、除法、乘法、求余、求次方等等),很多的功能,如果我们全写在main函数里,代码的可读性就会变得极差,而且main函数不仅会变得十分冗长,对于代码的调试和修改以及后期维护都难以进行。因此,我们把所有功能都进行封装打包,扔到我们自己的一个函数里,每一个函数都有想对应的功能(一般来说,我们要尽量加大自定义函数的独立性,方便函数的封装和后期维护),如此一来,我们就有了业务逻辑(想要程序实现的功能,如加法,就在main函数里面调用Add)和功能逻辑(再对Add进行定义),main函数就变得十分简洁明了,只需要用到哪些功能时,直接调用就行了,我们将功能逻辑的功能称之为解耦。在编写代码时,我们要首先知道我们想要实现什么功能,在主函数里对某一个可以实现该功能的函数先进行调用,等主函数完备后,再讲我们封装的功能进行定义,以配合我们的调用。我们把这种编程思维,称之为面向过程,即先明白要实现什么功能(对象)后,还需要对每一个功能进行具体构建(对象的构建),而不是直接调用该功能,比如我们要木材,就必须要自己种木头,浇花施肥,然后再取用,而不能直接去木材市场买,我们需要过程。

3.函数的组成

函数需要有定义之后才能调用,某些时候还需要声明(我们先不谈声明)

函数的定义由四部分组成:返回值(也叫函数类型)、函数名 、函数体 、形参

函数的调用由三部分组成:返回值、函数名、形参

3.1函数的命名法

为了增加可读性,和减少维护成本,我们通常把函数的命名方法定为见名知意,将名字按照大驼峰法进行命名(如加法及 Add,我的打印及 MyPrint)函数名以英文单词或者英文单词的简写构成,每个单词的第一个字母大写。

3.2函数的返回值

函数的返回值类型有int、char、double等各种类型,具体看你需要的功能。

如在刚刚的Add中,我们需要Add函数返回x和y的和(即返回一个整型,便于函数值的接收),因此我们需要在Add前面加int,如此我们便可以用int ret来接收函数值。

3.2.1void类型

在各种函数的返回值中,有一个奇怪却又常用的类型,叫作void(也就是空的意思),其实,它就是个占位子的,啥都不返回(我就站这儿,告诉别人这里这个座有人了)

如图所示,我们把printf放在了Add里面,如此来,我们就不需要接收Add的返回值来进行打印了,这个函数本身就有了打印的功能,因此我们把返回值(也就是函数类型写为void),也就是没有返回值。比如main函数也可以直接void main。

补充:

1.通常情况下,我们并不建议这么写,因为我们需要函数功能的独立性,减少多余的联系,后面大家会慢慢理解

2.main 函数建议以int作为返回值,代码规范是一个优秀程序员的基本素养。特立独行并不会让你变得优秀,优秀的代码是大多数人都能明白的代码

3.既然返回值已经为空,那我直接不写不行吗,为什么还要写一个void呢?

注意:函数默认是有返回值,不写的话会进行强制返回(强制类型转换为整型),默认返回值为int,有了void,就不会有其他返回值类型来占座

3.3形参与实参

函数调用括号里的参数叫作实参,函数定义括号里的参数叫作形参。

实参就是试试在在的真是的数据,就如同一张桌子,你砸了它一角,那这张桌子一角就真的没了。

形参本质上是对实参的临时拷贝(程序从主函数中运行到函数的调用时,就会自动在主函数前寻找该函数的定义,若发现定义,就会发生形参实例化,即将实参拷贝到形参里),还是一张桌子,发生形参实例化(临时拷贝)之后,就变成了两张桌子,现在你砸了第二张桌子,那第一张桌子依旧完好无损。而不管第二张桌子是是否损伤,只要出了它所在的代码块,它就会被销毁掉,而不能被其他函数继续使用,所以我们称之为临时拷贝。

上图,我们发现,在函数定义内拷贝参数改变的值并不会影响原值。这种参数传递方式我们叫做传值。

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注编程网的更多内容!

--结束END--

本文标题: 详解C语言初阶之函数

本文链接: https://www.lsjlt.com/news/157149.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 详解C语言初阶之函数
    目录 1.main函数2.自定义函数2.1  函数的的封装和面向过程的思维3.函数的组成3.1函数的命名法3.2函数的返回值3.2.1void类型补充:3.3形参...
    99+
    2022-11-12
  • 详解C语言初阶之数组
    目录1.数组1.1数组的概念1.2数组的定义 a:完全初始化b:不完全初始化 c:给定元素个数d:不给定元素个数1.3数组的下标访问总结1.数组 1.1数组的概念 所谓数组...
    99+
    2022-11-12
  • C语言初阶之数组详细介绍
    目录插入排序讲解二维数组二维数组的初始化二维数组的访问n维数组字符数组字符数组和字符串字符数组的输入输出字符串函数的简单使用综合使用字符串函数总结插入排序讲解 #include&...
    99+
    2022-11-12
  • 详解C语言初阶基础
    目录1.什么是c语言2.初始化:3.变量和常量4.作用域与生命周期简单阐述:作用域:生命周期(存在与消失):作用域与生命周期的区别作用域:生命周期:5.    &...
    99+
    2022-11-12
  • 详解C语言初阶基础(2)
    目录1.选择语句(if)2.循环while循环for循环do-while循环补充总结1.选择语句(if) 我们先不讲switch,后面会补充。先来对简单地if进行了解。 我们已经知道...
    99+
    2022-11-12
  • C语言进阶教程之函数指针详解
    目录一、函数指针1.概念1.2函数指针的使用方法1.3练习巩固1.4小结一下二、阅读两段有趣的代码1.( *(void( *)( ))0 )( )2.void (* signal(i...
    99+
    2022-11-13
  • 详解C语言之函数
    目录函数的调用函数调用方式函数嵌套调用递归调用内部函数与外部函数内部函数外部函数局部变量与全局变量局部变量全局变量总结函数的调用 函数调用方式 函数语句调用 函数表...
    99+
    2022-11-12
  • C语言中的初阶指针详解
    目录1.指针是什么2.指针和指针类型3.野指针3.1野指针成因3.2如何规避野指针4.指针的运算4.1指针±整数4.2指针-指针4.3指针的关系运算5.指针和数组6.二级指针7.指针...
    99+
    2022-11-12
  • C语言之qsort函数详解
    目录一.qsort函数原型二.qsort常见的几种比较函数1.int类型的排序2.double类型的排序3.char类型的排序4.字符串的排序:1.按首字母排序2.按字符串长度排序:...
    99+
    2022-11-12
  • C语言进阶之字符串查找库函数详解
    目录strstrstrtok总结strstr 查找strstr的文档,可知它的原型为: char *strstr( const char *string, const char *s...
    99+
    2023-01-28
    C语言字符串查找函数 用c语言实现字符串的查找 c语言查找字符串
  • C语言之初始if语句详解
    目录if语句有三种常见的使用方式总结if语句有三种常见的使用方式 1. if() //满足条件 .....//执行的功能 (不满足条件则不执行任何功能) 2. if() //满足条件...
    99+
    2022-11-12
  • C语言时间函数之strftime()详解
    strftime函数主要用于时间格式化,它的函数原型如下: size_t __cdecl strftime(char * __restrict__ _Buf,size_t _Size...
    99+
    2022-11-13
  • C语言之system函数案例详解
    来看看在windows操作系统下system () 函数详解(主要是在C语言中的应用) 注意:在windows下的system函数中命令可以不区别大小写! 函数名: system...
    99+
    2022-11-12
  • C语言之strtol函数用法详解
    strtol 函数用法 strtol是一个C语言函数,作用就是将一个字符串转换为长整型long,其函数原型为: long int strtol (const char* str,...
    99+
    2022-11-12
  • C语言进阶之文件操作详解
    目录0. Intro1. 文件名2. 文件的打开和关闭2.1 文件指针2.2 打开和关闭文件3. 文件顺序读写3.1 利用以上函数实现拷贝文件操作3.2 二进制的读写3.3 格式化输...
    99+
    2022-11-13
  • C语言lseek()函数详解
     头文件: #include <sys/types.h> #include <unistd.h> 函数原型: off_t lseek(in...
    99+
    2022-11-12
  • C语言memset函数详解
    目录一、memset函数原型:二、使用memset函数三、给int类型赋值为1四、扒开内存五、memset给变量赋值总结在c语言中,使用变量前,需要先对变量的值进行初始化。数组在内存...
    99+
    2022-11-12
  • C语言时间函数之mktime和difftime详解
    目录mktime函数difftime函数总结这两个函数原型如下: __CRT_INLINE time_t __cdecl mktime(struct tm *_Tm); __CR...
    99+
    2022-11-13
  • C语言文件操作之fread函数详解
    目录前言一、fread 函数二、缓冲区受限的情况 ( 循环读取文件 | feof 函数判定文件读取完毕 )三、处理乱码问题四、记录读取的字节个数五、读取到 0 字节的情况六、读取完毕...
    99+
    2022-11-13
  • C语言 指针数组进阶详解
    目录指针与数组中的sizeof与strlensizeofstrlen数组名1、一维数组整型数组字符数组指针数组2、二维数组指针笔试题 笔试题1笔试题2笔试题3笔试题4笔试题...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作