上章我们了解的库函数,和个别库函数的使用,这一章我们了解自定义函数
成都创新互联坚持“要么做到,要么别承诺”的工作理念,服务领域包括:网站建设、网站制作、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的铜川网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴! 自定义函数自定义函数和库函数一样,有函数名,返回值类型和函数参数。
但是不一样的是这些都是我们自己来设计。这给程序员一个很大的发挥空间。
函数的组成:
ret_type fun_name(para1, * )
{
statement;//语句项
}
ret_type 返回类型
fun_name 函数名
para1 函数参数
这里我们运用实例了解:写一个函数找出两个整数的大值:
首先我们先给a,b赋值,然后在主函数调用自定义函数get_max并给予相应的值,
(自定义函数的名称可以随便叫啥,但最好可以让别人大概知道这个函数的作用)
然后我们打印max,至于具体过程我们交给get_max完成
(上章讲过,函数具体执行过程我们不具体过问,只要给出正确结果就行)
当主函数编译完成后,我们再定义get_max。首先我们根据上面的语法格式定义函数,给予数据类型(int),函数名(get_max),函数参数(int x,int y)
(因为主函数传过来的是整型,所以我们定义时,也应该是整型)
之后我们定义 整型变量 z 并给初值,然后判断x 是否大于 y ,如果大于则 把 x 赋值给 z ,如果不大于则把 y 赋值给 z ,最后我们返回较大值 即,return z
之后我们再来看一个例子:
这里我们要求运用函数交换两个值的位置并打印,如:
首先我们定义 整型变量 a,b 然后先打印交换前的值,然后再调用函数swap并给予相应的值
最后我们打印交换后的值
和上一题一样,首先我们根据自定义函数格式定义函数,然后定义一个 整型变量 z ,我们先把 x 的值给 z ,再把 y 的值给 x ,最后我们把 z 的值给 y 完成交换,因为这个函数不需要返回值,所以我们给函数名前面加 void ,
表示不返回任何值,也不需要返回
然后我们运行程序,发现 a 和 b 并没有交换,如图,这是为什么呢?
经过调试后我们发现, x y 和 a b 的地址不同,是两个毫无关系的空间,如图:
所以我们在函数中交换时,并没有影响到主函数中,a和b的值
但如果我们可以让函数拿到a和b的地址,是不是就能改变a和b呢?
这里我们运用之前有初步了解的指针知识,写出代码,如:
我们定义一个新的函数swap2,我们将 a 和 b 的地址给予 swap2 ,即( &a ,&b )。
然后我们在函数中运用整型指针 pa 和 pb 接收,
(这时,我们在 pa 前面加 * 即可表示 a ,在pb前面加 * 即可表示 b )
然后我们定义变量 z ,重复我们第一次代码的过程进行交换,最后我们得到:
a 和 b 的位置我们就交换成功了
函数的参数之后我们回到之前那个问题,为什么我们第一次代码交换失败呢?
这里我们具体介绍一下,首先我们要先了解函数的参数的定义
实际参数(实参)真实传给函数的参数,叫实参。
实参可以是:常量、变量、表达式、函数等。
无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。
形式参数(形参)形式参数是指函数名后括号中的变量,因为形式参数只有在函数被调用的过程中才实例化(分配内存单元),所以叫形式参数。形式参数当函数调用完成之后就自动销毁了。因此形式参数只在函数中有效。
当我们了解过实参和形参的定义后,我们就能知道为什么我们第一次会交换失败
因为我们主函数中的 a b 是实参,而函数中的 x y 是形参,而形参有自己独立的空间并且在调用完毕后就销毁了,所以我们第一次交换失败了
所以我们可以简单的认为:形参实例化后相当于实参的一份临时拷贝
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧