今日份学习“函数”
本文简介:
了解C语言中的函数,如何有条理的使用创建函数,分别对函数的调用,函数的嵌套调用,函数的链式访问,函数的递归,函数的迭代进行一个概念性的了解。
一,函数
此函数非彼函数,不是跟数学函数一样,它被创造是计算机用来专门完成某个事情的,举个????:我们所熟悉的函数“printf”它就是专门的输出函数,将我们想的输出的数据打印到屏幕上。
分类:
????库函数:C语言本身所提供的函数(“printf”,"scanf","strcpy","rand","srand".......)
简单的介绍几个:
strcpy()函数,实现字符串拷贝
结构:
????返回字符地址 ????拷贝字符串的目的地????拷贝字符的源地址
举个????:
感觉是不是很方便
memset()函数,将字符串前面N个字符设置成特定的值
结构:
????返回空指针 ????要改的字符串????设为什么字符????设置多少
????:
是不是感觉很好玩~
当然除了C语言库中自带的函数,我们自己也可以创建函数供我们使用。
????自定义函数:我们自己创建的函数
创建函数的格式:ret-type fun-name(paral)
????返回值 ????函数名 ????函数参数
????:创建加法函数
测试一下:
看起来很好用????
概括:
实参:真实传给函数的参数:常量,变量,表达式,函数且具有确定的值
形参:接收实参的变量。
注意事项:
函数的实参只会将值进行传导给函数的形参,而形参只是实参的一份临时拷贝并不会改变实参原来的值。
函数的调用:
1.传值调用:将实参的值给形参,同时开辟一个新的内存地址,对形参改变不会改变实参
2.传址调用:将实参的地址给形参且改变形参相当于改变实参
????:传值调用
传值并没有改变a的值
????:传址调用
传址改变了a的值
✨指针变量使用自增自减时要考虑其优先级
✨函数设计时单一且干净
✨当函数传值是数组时,它只传该实参数组的首个元素的地址,且形参类型必须为指针接收,
✨在调用数组一定要注意,随然函数内可以依次访问数组中的内容,但如果计算该数组形参的大小时,计算的只是该第一个元素的大小。
函数的嵌套调用:
函数和函数之间可以随机组合:
套娃????
函数的链式访问:
把一个函数的返回值作为另外一个函数的参数
????:
"printf"函数的返回值为函数内字符个数
✨函数的定义要把自定义函数写在main函数前面(函数声明)
✨函数的声明尽量放入头文件中
函数的递归:
程序调用自身的编程技巧称为“函数递归”,工作核心是“大事化小”
递归的两个必要条件:
✨存在限制条件,当满足这个限制条件时候递归不再继续
✨没次递归调用时候越来越接近这个限制条件
注意事项:用递归写代码需要考虑是否栈溢出(stack overflow)
????:输入1234 屏幕输出4 3 2 1用递归实现
函数的迭代
在C语言中,函数迭代是指使用循环结构来多次调用同一个函数,并且每次调用该函数时都传递不同的参数。这样可以重复执行一段代码,直到满足某个条件为止。函数迭代通常使用for或while语句来实现。
????:
factorial函数使用循环结构来迭代调用自身,以计算n的阶乘。循环从1开始,一直累乘到n,最终返回计算结果。
经典算法题:斐波那契数,汉诺塔,青蛙跳台。
结束语:
人生没有彩排,每天都是现场直播。珍惜每一天,抓住每一个机会。
加油各位!!!