函数的定义声明 用法 形参实参 return关键字

day08 函数

  1. 什么是函数 :函数就是一段特殊功能的代码

  2. 函数 定义 的语法

    • 函数必须写在main函数的外面
    • 格式

    eg:

         数据类型 函数名称(参数列表)
           {
               函数体;
            }
         eg:
             void showLogo()
             {
               printf("这里面的叫函数体");
             }
    

函数调用的语法

    showLogo();    这个写在main函数里面 就可以调用函数

函数的使用
* 什么时候使用函数
* 当有一段代码需要重用的时候 那么可以将这些代码封装到一个函数中什么时候想要用的时候,什么时候就可以直接调用
* 使用函数的好处
* 减少代码的冗余
* 修改维护方便
* 屏蔽代码的现实,我们只需要知道函数的功能,而不需要关心怎么实现

局部变量和全局变量的异同点

  • 变量: 在内存中用来存储数据开辟的那块空间
    • 局部变量: 定义在函数或者代码块内部的变量
    • 全局变量: 定义在所有函数和代码块外部的变量
  • 全局变量和局部变量的异同点
    • 相同点
      • 都是内存中的若干干字节,用来存储数据的
    • 不同点
      • 定义的位置不同
      • 作用域不同(有效范围)
        • 局部变量 : 在定义局部比那辆的代码块中有效
        • 全局变量 : 从全局变量定一的那一行来时直到程序结束
    • 声明周期不同
      • 局部变量:
        • 只有CPU执行到该行代码的时候 才会被创建 代码块或者函数执行完毕后就会回收
      • 全局变量 :
        • 只要程序一启动 那么全局变量就会被创建整个程序停止之后 全局变量才会被回收
    • 默认值不相同
      • 局部变量: 如果没有赋值,那么系统会给他一个垃圾值
      • 全局变量: 一般来说 全局变量 如果没有赋值 那么他的值 是 0
      • 不同类型的初始值问题
类型 初始值
int 0
float 0.0f
double 0.0
char ‘\0’

小练习

思考:如何计算一个函数在程序中调用了多少次



int count = 0;//这里可以定义count 用来记录函数执行的次数

void test()
{
//    int count = 0;
    //此处定义count不能在这,因为在这里定义的count是局部变量,函数执行完了之后会被回收
    count++:
    printf("test函数被调用了!\n");
}

int main()
{
    for (int i = 0; i < 5; i++) {
        test();
    }
    int num = 0;
    printf("请输入一个数:\n");
    scanf("%d",&num);

    if(num % 2 == 0){
        test();
    }
}
  • 什么时候使用全局变量

    函数需要被所有函数访问的时候
    
  • * 主调函数与被调函数*

    main函数调用者: 是系统自动调用的,而且我们程序员不能主动调用
    main函数中 调用了A();函数,而在A函数中又调用了B函数
    那么A函数的调用者 是A函数
    北调用的函数 我们成为:被调函数
    调用别的函数的函数 我们称为:主调函数
    
  • 函数什么时候需要参数

    当某个函数完成一个特定的功能,但是需要一些奇特数据的时候
    比如:
    一个函数 他的功能 是判断一个整数 是否是偶数但是北调函数并不知道这个数
    主调函数直到,只有通过函数的参数传递给北调函数
    
  • 形参和实参

    • 形参 :声明在函数定义中的小括弧里面的参数
    • 实参: 调用函数的时候的传递的值
void printOneNumber(int num){//这里的num就是形式参数
        printf("num = %d\n",num);
    }
    int main()
    {
        printOneNumber(50);//这里的50就是实际参数
    }
    "注意
        实际参数的类型 一定 要和 形式参数的类型保持一致
  • 如何定义一个带参数的函数

    函数类型 函数名称(数据类型 变量名)
    {
        //  函数体;
    }
    
    调用函数:
    函数名称(实际参数的值;
    实际参数的类型 一定要和 形式参数保持一致
    
  • 函数调用执行步骤

    • 加载函数
    • 如果函数有参数,声明函数的参数(在内存中开辟空间)
    • 将参数的值 copy给形参
    • 执行函数的函数体
    • 函数体执行完毕之后 回到驻地啊函数 接着向下执行
  • * 参数可以实现的效果*

    • 参数的最大值的作用:
      • 把主调函数中的数据传递给被调函数
    • 实际参数可以使是常量 也可以是变量,还可以是表达式
    • 实参 传递数据给形参的过程是一个赋值的过程(copy的过程)
    • 结论: 在函数内部 是不能通过传递进来的变量 来改变主掉函数中变量的值
  • 函数什么时候需要带参数

    函数:完成特定功能的代码块
        当一个函数要完成一个特定功能时
        发现需要一个数据 但是函数内部
        并不知道这个数是多少的时候需要主调函数传递过来
        那么这时候这个被调函数就需要有一个参数,
        接收主调函数传递过来的数据
    

return关键字

  • **return关键字使用在函数题之中

    • 它的作用:
      *在函数体中的return关键字 表示”立即结束“这个函数的执行,
      所以说return的作用就是 提前结束这个函数
  • 函数中 如果有需要返回的计算结果 那么这个函数需要一个返回值

  • 目的是把函数中计算后的结果传递给调用者
    • 确定 返回的数据 是什么类型的
    • 修改函数的返回值类型 和 你要返回的数据类型一致
    • 在函数中用 return 关键字返回数据
int getSum(int num1,int num2)
    {
        int sum = num1 + num2;
//        printf("sum = %d\n",sum);
        return sum;
    }
    int main()//主调函数
    {
       int result =  getSum(10,20);
       printf("result = %d\n",result);
    }
  • **主调函数在接受返回值是 定义一个和被调函数数据返回值类型相同的变量接收即可

  • 使用带返回值的函数注意细节

    • 返回值的类型 要与接收数据变量的类型相同
    • void 表示没有任何返回值不需要接收
    • return的使用不管在有返回值还是诶呦返回值的函数中,都表示”结束“这个函数
      • 在屋返回值的函数中,直接用 也可以不用
      • 在又返回值得函数中,必须使用return数据
    • 一旦函数定义了返回值,那么就必须在函数结束前有返回值
    • 一旦定义了返回值 就要保证每一个分之结束之前必须有返回值

      报错: Control may reach end of non-void function
      这个错误表示 你可能在某种情况下没有返回值

上期答案时间到:

跟大家分享一道今天在网上看到的面试题

int main()
    {

        for (int i = 0; i < 10; i++) {

            for (int j = 0; j < 10; j++) {
                //这里写一段代码,结束外层循环
                i = 10;
                break;
                // 答案在这里 这里
            }
        }

        return 0;
    }

你可能感兴趣的:(c语言基础)