• C学习笔记-函数


    函数的定义

    返回值类型 函数名([[参数类型 参数名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
    ", one, three);
    	else
    	{
    		hanoi(n - 1, one, three, two);
    		printf("%d->%d
    ", one, three);
    		hanoi(n - 1, two, one, three);
    	}
    }
    

    递归的优缺点

    优点:让有些问题提供了最简单的方法
    缺点:容易耗尽资源,代码难懂的难以维护

  • 相关阅读:
    用户画像
    华为离职副总裁徐家骏:年薪千万的工作感悟
    JAVA CAS原理深度分析-转载
    彻底理解ThreadLocal二
    彻底理解ThreadLocal一
    观察者模式(浅谈监听器工作原理)
    Java编程提高性能时需注意的地方
    Spring对Quartz的封装实现简单需注意事项
    FileInputStream和BufferedInputStream的区别
    java
  • 原文地址:https://www.cnblogs.com/cj5785/p/10664802.html
Copyright © 2020-2023  润新知