服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C/C++ - 详解C语言初阶之函数

详解C语言初阶之函数

2022-02-22 14:46鲸落之·海 C/C++

这篇文章主要介绍了C语言中的初阶函数,介绍了其相关概念,具有一定参考价值。需要的朋友可以了解下,希望能够给你带来帮助

1.main函数

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

详解C语言初阶之函数

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

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

 

2.自定义函数

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

详解C语言初阶之函数

在这里,我们把一个简单地加法运算进行了封装。只要在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(也就是空的意思),其实,它就是个占位子的,啥都不返回(我就站这儿,告诉别人这里这个座有人了)

详解C语言初阶之函数

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

补充:

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

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

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

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

3.3形参与实参

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

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

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

详解C语言初阶之函数

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

 

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注服务器之家的更多内容!

原文链接:https://blog.csdn.net/zlwy1314/article/details/121240642

延伸 · 阅读

精彩推荐
  • C/C++C语言实现双人五子棋游戏

    C语言实现双人五子棋游戏

    这篇文章主要为大家详细介绍了C语言实现双人五子棋游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    两片空白7312021-11-12
  • C/C++C语言main函数的三种形式实例详解

    C语言main函数的三种形式实例详解

    这篇文章主要介绍了 C语言main函数的三种形式实例详解的相关资料,需要的朋友可以参考下...

    ieearth6912021-05-16
  • C/C++OpenCV实现拼接图像的简单方法

    OpenCV实现拼接图像的简单方法

    这篇文章主要为大家详细介绍了OpenCV实现拼接图像的简单方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    iteye_183805102021-07-29
  • C/C++关于C语言中E-R图的详解

    关于C语言中E-R图的详解

    今天小编就为大家分享一篇关于关于C语言中E-R图的详解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看...

    Struggler095962021-07-12
  • C/C++c/c++内存分配大小实例讲解

    c/c++内存分配大小实例讲解

    在本篇文章里小编给大家整理了一篇关于c/c++内存分配大小实例讲解内容,有需要的朋友们可以跟着学习参考下。...

    jihite5172022-02-22
  • C/C++c/c++实现获取域名的IP地址

    c/c++实现获取域名的IP地址

    本文给大家汇总介绍了使用c/c++实现获取域名的IP地址的几种方法以及这些方法的核心函数gethostbyname的详细用法,非常的实用,有需要的小伙伴可以参考下...

    C++教程网10262021-03-16
  • C/C++深入C++拷贝构造函数的总结详解

    深入C++拷贝构造函数的总结详解

    本篇文章是对C++中拷贝构造函数进行了总结与介绍。需要的朋友参考下...

    C++教程网5182020-11-30
  • C/C++使用C++制作简单的web服务器(续)

    使用C++制作简单的web服务器(续)

    本文承接上文《使用C++制作简单的web服务器》,把web服务器做的功能稍微强大些,主要增加的功能是从文件中读取网页并返回给客户端,而不是把网页代码...

    C++教程网5492021-02-22