函数的定义

返回值类型 函数名([[参数类型 参数名1],[参数类型 参数名2],···,[参数类型 参数n]])
{
//执行语句
return 返回值;
}
  • 返回值类型:用于限定函数返回值的数据类型;
  • 函数名:表示函数的名称,该名称可以根据标识符命名规范来定义;
  • 参数类型:用于限定调用方法时传入参数的数据类型;
  • 参数名:用于接收调用方法时传入的数据;
  • return关键字:用于结束函数,并返回函数指定类型的值
  • 返回值:被return语句返回的值,该值会返回给调用者。如果函数没有返回值,则返回值类型要声明为void,此时,函数体中的return语句可以省略不写

函数的调用

函数在使用前必须定义或声明

先定义再调用

int getLong(int num)
{
···
}
int main()
{
getLong(5);
}

这种方式就是先定义再使用。

先声明再调用

int getLong(int num); //此处可以写为int getLong(int);
int main()
{
getLong(5); //5为实参
}
int getLong(int num) //num为形参
{
···
}

这种方式就是先声明再调用。

无参函数与有参函数

无参函数:参数列表为空的函数

void func()
{
//代码
}

有参函数:有参数列表的函数

void func(intn,  int m)
{
//代码
}

函数的形参和实参

主调函数与被调函数之间,需要用参数来传递数据。

在定义函数时函数名后面括弧中的变量名称为“形式参数”,称为形参

在调用函数时,函数名后面括号中的变量或表达式称为“实际参数”,称为实参

关于实参与形参的一些要点

  • 形参在未出现函数调用时,他们并不占用内存单元,只有在发生函数调用的时候形参才被分配内存,函数调用完成后,形参所占的内存被释放
  • 实参可以是变量,常量或者表达式
  • 在定义函数时,一定要指定形参的数据类型
  • 形参与实参的数据类型一定要可兼容
  • 在C语言中,实参与形参的数据传递是“值传递”,即单向传递,只由实参传递给形参,而不能由形参传递给实参。

函数的返回类型与返回值

  • 函数的返回值通过函数中的return获得,如果函数的返回值为void可以不需要return语句
  • 函数return语句中的返回值数据类型应该与函数定义时相同
  • 如果函数中没有return语句,那么函数将返回一个不确定的值

exit函数

exit函数可以在任意位置退出整个程序

exit(1);

函数的递归

函数的自我调用,叫做函数的递归

递归必须要有一个结束条件

递归经典案例:斐波那契数列

int fib(int n)
{
if (n == 0)
return 0;
if (n == 1)
return 1;
if (n > 1)
return fib(n - 1) + fib(n - 2);
}

递归经典案例:汉诺塔

  1. 将1针上n-1个盘借助3针移动到2针上;
  2. 将1针上剩下的一个盘移动到3针上;
  3. 将n-1个盘从2针借助1针移动到3针上
void hanoi(int n, int one, int two, int three)
{
if (n == 1)
printf("%d->%d\n", one, three);
else
{
hanoi(n - 1, one, three, two);
printf("%d->%d\n", one, three);
hanoi(n - 1, two, one, three);
}
}

递归的优缺点

优点:让有些问题提供了最简单的方法

缺点:容易耗尽资源,代码难懂的难以维护

最新文章

  1. GCC编译过程
  2. js未定义判断
  3. Cwinux源码解析系列
  4. java之注解Annotation
  5. spingmvc 返回json数据日期格式化方法
  6. Delphi 中 paramstr 的用法及参数意义
  7. Apache Spark Streaming的优点
  8. C#技术分享【PDF转换成图片——13种方案】(2013-07-25重新整理)
  9. 初探eXtreme scale
  10. eclipse快速定位java对应的class
  11. JAVA To C++ Converter Cracked ( 破解版 )
  12. OC在终端编写和运行
  13. Java 常见摘要算法——md5、sha1、sha256
  14. linux子系统ubuntu16.04安装使用xrdp当远程桌面
  15. .NET轻量级ORM框架Dapper入门精通
  16. 通配符(WildCard)的使用
  17. hdu5293 lca+dp+树状数组+时间戳
  18. Java并发编程原理与实战二十四:简易数据库连接池
  19. Java变量声明,实例化,问题
  20. Eclipase + CDT

热门文章

  1. 无法安装 Composer 怎么办?
  2. uint128_t 添加 c++ 重载类型强制转换
  3. SQL基础练习03---牛客网
  4. Ubuntu操作及Linux基础知识
  5. pat 甲级 1034 ( Head of a Gang )
  6. 第四届西安邮电大学acm-icpc校赛 热狗树
  7. 【线性代数】3-5:独立性,基和维度(Independence,Basis and Dimension)
  8. 早停!? earlystopping for keras
  9. msbuild不是内部或外部命令
  10. shell tail 命令