[c语言]从懵逼到入门,教你如何自定义函数(用电脑打开,图片遮文字)

什么是函数?

在本文开始前·,我们首先要了解什么是函数,这将有助于增进我们对自定义函数的理解。

概念

  1. 在计算机科学中,子程序(也就是C语言中的函数),是一个大型程序中的某部分代码, 由一个或多个语句块组 成。它负责完成某项特定任务,而且相较于其他代 码,具备相对的独立性。

  1. 一般会有输入参数并有返回值,提供对过程的封装和细节的隐藏。这些代码通常被集成为软 件库。

在概念中,函数是“封装”好的一段程序,在功能和内容上具有相对独立性,程序员们往往通过他来做一种需要多次重复的过程,这种对函数的需求是普遍存在的,由此,对最常用函数的归纳整理也促成了“库函数”这一概念的产生。

(库函数:一般是指编译器提供的可在c源程序中调用的函数。可分为两类,一类是c语言标准规定的库函数,一类是编译器特定的库函数。

那为什么要自定义函数?

问:“库函数”中囊括了编程所需要的常用函数,那我们为什么还要自定义函数呢?

答:如果库函数能干所有的事情,那还要程序员干什么?

自定义函数作为程序员必备的一项技能,他更多的是对库函数的一种补足,当库函数无法满足我们的需求时,就需要我们自己在定义一个函数来达成目标。

如,当我们需要一个函数来判断两个整形常量的大小,在编译器中,C语言并没有提供相关的库函数,这样我们就要自定义一个函数来实现这一功能。

-------------正文------------

自定义函数

基础篇———

一、概念

通过上方自定义函数意义的分析,我们可以给自定义函数下个定义:

定义函数从字面意思上理解就是自己定义的函数,因为库函数不能满足大家的所有需求,所以有时候需要程序员自己编写属于自己的函数。

二、自定义函数的构成

自定义函数和库函数一样,有函数名,返回值类型和函数参数。

ret_type fun_name(para1, * )
{
 statement;//语句项
}

ret_type 返回类型
fun_name 函数名
para1    函数参数
  1. 返回类型:返回类型与返回值类型一 一照应,未标明返回值类型时,默认返回了为”int“。

  1. 函数名:自己为函数起的名字,可以由大小写字母、数字和字符组成,不能由数字开头,且函数名不能和关键字相同。

  1. 函数参数:分为实参和虚参(下面会讲)。

入门篇———

一、创建自定义函数

(一)创建格式

返回类型 + 函数名(参数类型+参数,同,......)

{

函数体;(执行部分)

}

注:参数上限为1024,但过犹不及,多并不代表好

注:不需要返回值或参数时,可用void代替

(二)创建思路

在完成主函数构建后,一般流程可为:

  1. 两个元素

明白函数要干什么?用什么干?

①干什么?

即:所定义函数要实现怎样的功能或效果。

②用什么干?

即:要实现我们想要的效果,函数需要什么数据(参数)。

  1. 搭建格式

在明白了“两个元素”后我们就可以确定函数的返回类型、参数类型,这时候我们给函数起一个合适的名字就可以搭建起函数的外壳部分。

int max(int x,int y)//返回类型  函数名(类型+参数1,类型+参数2)
{
//函数体
}
  1. 完善函数内容

搭建完函数框架还要填充函数的内容,通过代码来赋予他功能。

int max(int x,int y)
{
if (x > y)
        return x;
    else
        return y;
}
  1. 测试

高手也会犯错,在程序未运行起来之前,没人能保证程序就一定是对的,所以测试也是必不可少的。

二、形参与实参

  1. 实际参数(实参): 真实传给函数的参数,叫实参。 实参可以是:常量、变量、表达式、函数等。 无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形 参。

int a = max(1,14);//“1”和“14”为实参
  1. 形式参数(形参): 形式参数是指函数名后括号中的变量,因为形式参数只有在函数被调用的过程中才实例化(分配内 存单 元),所以叫形式参数。形式参数当函数调用完成之后就自动销毁了。因此形式参数只在函数中有 效。

三、函数的调用

(一)定义

即:计算机编译或运行时,使用某个函数来完成相关命令。通俗来讲,函数用了就是调用。

(二)分类
  1. 传值调用 顾名思义,传值调用是将参数的值传给函数。

  1. 传址调用 传址调用是把函数外部创建变量的内存地址传递给函数参数的一种调用函数的方式。

进阶篇———

一、传值调用和传址调用深解

(一)调用与传递

在前文中我们说过“形式参数只有在函数被调用的过程中才实例化(分配内存单元)”

也就是说在调用函数时,传来的参数被存储在新的、为形参分配的内存空间中,可以简单理解为形参是实参的一份临时拷贝。

图片中可以观察到,a和x的地址不同,所处内存空间也不同,只是存储的值相同。

而本质不同,形参变化自然不会改变实参

(二)传址调用 和传值调用

了解了实参和形参的本质区别,我们发现,形参的改变其实是无法对主函数内的形参产生影响的。

那么通过什么途径使函数具备改变实参的能力呢?

答案是指针,指针是变量的地址,指针变量是变量,作为变量它当然可以作为参数传给函数。

下面做一个实验,我们将指针作为参数,通过指针来直接找到实参所在的内存单元进行改变,再尝试能否改变实参。

结果显而易见,通过指针(地址),我们成功从本质上改变了实参。

由此可以得出结论:

传值调用这种传参方式可以让函数和函数外边的变量建立起真正的联系,也就是函数内部可以直接操 作函数外部的变量。

(三)总结

传值调用和传址调用分别有不同的应用场景,要结合实际情况做出选择。

二、习题练习

1. 写一个函数可以判断一个数是不是素数。 2. 写一个函数判断一年是不是闰年。 3. 写一个函数,实现一个整形有序数组的二分查找。 4. 写一个函数,每调用一次这个函数,就会将 num 的值增加1。

NB篇———

我不会了

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值