函数的定义

返回值类型 函数名([[参数类型 参数名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);
}
}

递归的优缺点

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

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

C学习笔记-函数的更多相关文章

  1. 《python基础教程(第二版)》学习笔记 函数(第6章)

    <python基础教程(第二版)>学习笔记 函数(第6章) 创建函数:def function_name(params):  block  return values 记录函数:def f ...

  2. swift swift学习笔记--函数和闭包

    使用 func来声明一个函数.通过在名字之后在圆括号内添加一系列参数来调用这个方法.使用 ->来分隔形式参数名字类型和函数返回的类型 func greet(person: String, day ...

  3. c语言学习笔记 函数数组传递笔记

    今天学习c语言的一个小例子,果然还是陷入了php的编程习惯里,这里记录一下. #include <stdio.h> //例子很简单,就是编写一个函数把传递进来的数组里的值都赋值为1而已 / ...

  4. 《JS语言精粹》学习笔记 函数部分の闭包

    要理解闭包,首先要理解变量作用域,变量的作用域就两种,全局变量和局部变量,函数内部可以直接读取全局变量,函数外部无法读取函数内部的局部变量. 闭包定义:能读取函数内部局部变量的函数就是闭包,而只有函数 ...

  5. Python学习笔记——函数

    1.标准类型内建函数 <1>type() —— 返回对象的类型 <2>cmp() —— 比较两个对象,返回两个对象的ASCII码的差 <3>str().repr() ...

  6. JavaScript学习笔记-函数

    函数的两种创建方式:函数定义表达式.函数声明语句 编译时,函数声明语句创建的函数会‘被提前’至外部函数的作用域顶部,在该作用域内可以被随意调用: 而函数表达式创建的函数,要调用它必须赋值给一个变量,编 ...

  7. JavaScript学习笔记-函数实例

    函数实例 var p = { a:15, b:'5', f1:function(){ var self = this; console.log(self.a+self.b); f2(); functi ...

  8. JavaScript学习笔记——函数

    javascript函数的声明和调用 将完成某一特定功能的代码集合起来,可以重复使用的代码块. 一.函数的声明方式(创建) A.基本语法 function 关键字 function 函数名([参数1] ...

  9. MySQL学习笔记——函数

    常用函数 ALTER TABLE tb_emp ); #插入数据 INSERT INTO tb_dept() VALUE(,'市场部','负责市场工作'); # concat 连接 SELECT CO ...

  10. Android学习笔记函数

    //调用新的Activity Intent intent=new Intent(MainActivity.this,Main2Activity.class); startActivity(intent ...

随机推荐

  1. 2018-2019 ACM-ICPC Brazil Subregional Programming Contest B. Marbles(博弈)

    题目链接:https://codeforc.es/gym/101908/problem/B 题意:两个人玩游戏,有 n 块石头,初始坐标为(x,y),一次操作可以将一块石头移动到(x - u,y),( ...

  2. encodeURI()、encodeURIComponent()、escape()

    URI的通用格式如下: /*** 协议://用户名:密码@子域名.域名.顶级域名:端口号/目录/文件名.文件后缀?参数1=值1&参数2=值2+值3#标志 **/ /*** http://use ...

  3. 图像傅里叶变换(快速傅里叶变换FFT)

    学习DIP第7天,图像傅里叶变换 转载请标明出处:http://blog.csdn.net/tonyshengtan,欢迎大家转载,发现博客被某些论坛转载后,图像无法正常显示,无法正常表达本人观点,对 ...

  4. 权势二进制(51Nod 1413)

    一个十进制整数被叫做权势二进制,当他的十进制表示的时候只由0或1组成.例如0,1,101,110011都是权势二进制而2,12,900不是. 当给定一个n的时候,计算一下最少要多少个权势二进制相加才能 ...

  5. Go语言编程中字符串切割方法小结

    1.func Fields(s string) []string,这个函数的作用是按照1:n个空格来分割字符串最后返回的是[]string的切片 复制代码代码如下: import ( "fm ...

  6. ARTS打卡计划第十二周

    Algorithms: https://leetcode-cn.com/problems/balanced-binary-tree/ 平衡二叉树. Review:  “What I Learned i ...

  7. MAC ADDRESS

    可以使用手机Wifi或蓝牙的MAC地址作为设备标识,但是并不推荐这么做,原因有以下两点:硬件限制:并不是所有的设备都有Wifi和蓝牙硬件,硬件不存在自然也就得不到这一信息.获取的限制:如果Wifi没有 ...

  8. OUC_Summer Training_ DIV2_#7 718

    是18号做的题啦,现在才把报告补上是以前不重视报告的原因吧,不过现在真的很喜欢写报告,也希望能写一些有意义的东西出来. A - Dragons Time Limit:2000MS     Memory ...

  9. Ubuntu 安装 JDK1.8

    以下是Ubuntu 14.04安装JDK1.8.0_25与配置环境变量过程笔记. 1.源码包准备: 首先到官网下载jdk,http://www.oracle.com/technetwork/java/ ...

  10. 腾讯云安装mysql数据库

    转载自  https://www.cnblogs.com/shalldou/p/10767043.html 首先,我们检测一下系统中是否已安装mysql的相关服务 命令: rpm -qa | grep ...