C语言-------函数

        对于函数,我相信大家肯定不会陌生,毕竟我们初中的时候就已经学习了函数 y = f(x),但这是数学中的函数,那c语言中的函数是什么呢?     

 函数是什么?
        维基百科中对函数的定义: 子程序
        在计算机科学中,子程序(英语:Subroutine, procedure, function, routine, method,
subprogram, callable unit ),是一个大型程序中的某部分代码, 由一个或多个语句块组
成。它负责完成某项特定任务,而且相较于其他代 码,具备相对的独立性。
一般会有输入参数并有返回值,提供对过程的封装和细节的隐藏。这些代码通常被集成为软
件库。
         在c语言中函数又可以分为两类,一个是库函数,一个是自定义函数.
1.库函数
为什么会有库函数?
1. 我们知道在我们学习 C 语言编程的时候,总是在一个代码编写完成之后迫不及待的想知道结果,想
把这个结果打印到我们的屏幕上看看。这个时候我们会频繁的使用一个功能:将信息按照一定的格
式打印到屏幕上( printf )。
2. 在编程的过程中我们会频繁的做一些字符串的拷贝工作( strcpy )。
3. 在编程是我们也计算,总是会计算 n k 次方这样的运算( pow )。
像上面我们描述的基础功能,它们不是业务性的代码。我们在开发的过程中每个程序员都可能用的到,
为了支持可移植性和提高程序的效率,所以 C 语言的基础库中提供了一系列类似的库函数,方便程序员
进行软件开发。
那怎么学习库函数呢?
这里我们简单的看看: https://cplusplus.com
       打开后我们首先看到的是这样的界面
   
但是这个界面没有办法搜索,所以我们点击右上角将它切换成旧版本的界面

 

然后可以自行搜索想要了解的函数.

 ......

简单的总结, C 语言常用的库函数都有:
IO函数
字符串操作函数
字符操作函数
内存操作函数
时间/日期函数
数学函数
其他库函数
但是在我们使用这些函数的时候必须包含其对应的头文件,类如我们使用标准化输入输出时( printf,scanf)就必须 #include<stdio.h>

而自定义函数,顾名思义就是根据我们的需要自行创建,自行定义的的函数

自定义函数存在的原因也是因为库函数解决不了我们遇到的所有问题,而这也是我们程序员的价值所在

 举个例子:

比如我们要写一个加法函数

 

int -- 返回类型

ADD--函数名

x,y--函数参数

 代码中的a和b为实参,x和y为形参,实参和形参的命名是可以一样的,形参是实参的一份临时拷贝,这里我们先按下不表.

在c语言中我们规定函数是必须先声明后使用的,看到这里估计有的小伙伴有疑问了:那main函数也是函数,为什么不见main函数的声明呢?

原来在c语言中,函数的声明和定义是可以一起的,因为程序是从上到下依次读取,所以只要我们把自定义的函数放在main前面,那么便不需要去声明了,就如同以下这样:

而至于main函数则是因为c语言规定不论main函数放在什么位置,都第一个从main函数进入,所以也就不需要再去声明了

 当然,函数的声明和定义肯定不会是这种用法,真正的目的其实是为了引入外部函数。那什么是外部函数,又为什么要引入外部函数呢?我们来通过一个例子说明:

比如我们现在在一家公司上班,老板让写一个计算机程序,然后把这个任务分配给一个小组让他们完成。那么肯定是要分工合作,一人负责写加法,一人负责写减法...,那么肯定就无法在一个源文件中去完成。而在我们在要引用别人负责写的部分时,就需要去引用,如:

 这才是它的真正用途.

说完了函数的声明和定义,我们来说一下函数的调用:

1.传值调用
2.传址调用
在说这两种之前,我们就要来解释以上上面提到的形参和实参了.
那什么是形参,什么又是实参呢?
  实际参数(实参):
真实传给函数的参数,叫实参。
实参可以是:常量、变量、表达式、函数等。
无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形
参。
  形式参数(形参):
形式参数是指函数名后括号中的变量,因为形式参数只有在函数被调用的过程中才实例化(分配内
存单
元),所以叫形式参数。形式参数当函数调用完成之后就自动销毁了。因此形式参数只在函数中有
看完了定义后,我们大致有了解,至于具体的实例我们用代码来说话。
比如我们来写一个交换值的函数:

通过这段代码,可以看出我们的目的是为了让a和b的值进行交换,那么最后输出的结果应该是

 

a = 20,b = 10,那么我们来看一下结果 

 结果我们却发现a和b的值根本没有改变,那是我们的交换函数内部出错了吗?那么我们来看一下函数内部x和y的值有没有变化:

输出的结果去显示x和y的值是交换了的,证明了我们函数内部的是没错的,那到底是什么原因使我们的a和b没有交换呢?
原来函数的形参和实参分别占有不同内存块,对形参的修改不会影响实参.
那么我们来将a,b和x,y的地址取出来看看,是不是这样

 

输出的结果也表名地址确实不一样,那么一切也就解释的通了。这也就是为什么我们说形参是实参的一份临时拷贝,而上面我们的那种形式也就叫做传值调用.
那么有办法通过函数改变a,b的值吗?答案当然是肯定的,这就需要我们用到函数的传址调用了.
我们只需要在传参的时候,传入的是a,b的地址就可以,然后在接受的时候也以指针的形式来接受,那么一切也就水到渠成了.

 有关函数的内容我们就先讲到这里,如果文章内有什么错误的地方,也请广大网友指正出来,非常感谢大家的观看,谢谢.

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值