【C语言笔记】<五>函数

C语言程序是有函数组成的.函数是C语言的基本模块,通过对函数模块的的调用来实现特定的功能

什么是函数

函数就是一段具备特定功能的程序段

函数的格式

返回值类型 函数名称(型参列表){
函数体;//语句
}

函数的调用过程
// 注意: 形参列表中的变量只有当函数被调用时才会分配存储空间
// 形参列表中的每一个变量我们称之为, 形式参数, 简称形参
int average(int v1, int v2)
{
    int average = (v1 + v2) / 2;
    return average;
}
int main(int argc, const char * argv[]) {
    // 需求: 求两个数的平均值
    int a = 10;
    int b = 20;
    // 调用函数时传入的参数, 我们称之为实际参数, 简称实参
    int result = average(a, b);
    printf("result = %i\n", result);
    return 0;
}
调用过程内存分析
函数注意点
  • 如果"基本数据类型"(char int double float)作为函数的参数, 在函数中修改形参的值, 不会影响到外面实参的值
  • 实参的个数, 必须和形参的个数相同
  • 返回值可以和返回值类型不一样,但是如果返回值和返回值类型不一样的时候
    系统会对返回值进行自动类型转换(隐式类型转换), 将返回值转换为返回值类型
  • 函数可以有形参也可以没有形参
  • 函数可以有返回值, 也可以没有返回值
    1.如果函数没有返回值, 那么返回值类型就写viod
    2.如果函数没饭返回值, 那么可以不写return, 但是如果写了return也不会报错
  • return的应用场景

1.用于在函数中返回结果给函数调用者
2.结束函数
3.提前结束函数
4.return后面不可以写任何语句, 因为执行不到

  • 函数名称不能相同
  • 函数不能嵌套定义
  • C语言是弱语言(函数可以没有返回值类型; 如果函数没有写返回值类型, 那么默认就是int类型)
函数的声明和实现
  • 在C语言中,函数定义顺序是有讲究的,默认情况下,只有后面定义的函数才可以调用前面定义过的函数
  • 如果想把函数的定义写在main函数后面,而且main函数能正常调用这些函数,那必须在main函数的前面进行函数声明
  • 函数声明格式

返回值类型 被调函数名(类型 形参,类型 形参);
返回值类型 被调函数名(类型,类型 );

  • 如果被调函数的返回值是整型时,可以不对被调函数做说明,而直接调用,这时系统将自动对被调函数返回值按整型处理
main函数的分析
// main是函数的名称, 是系统规定的名称, 系统启动程序就会调用名称叫做main的函数
// main函数只能由系统调用 ,不能手动调用

// 其实系统在启动程序的时候, 会给我们的程序传递一些参数
//  argc : 就是系统传递进来的参数个数, 默认是1
//  argv : 就是系统传递进来的参数实际的值, 默认是程序的名称
int main(int argc, const char * argv[]) {
    
    printf("argc = %i\n", argc);
    printf("argv = %s\n", argv[0]);
    printf("argv = %s\n", argv[1]);
    
    // return 结束函数
    // 0 : 返回给操作系统, 如果返回0, 代表程序整除结束, 如果返回其它值代表程序非正常结束
    return 0;
}
  • 添加系统传进来的参数


递归函数
int main(int argc, const char * argv[]) {
    // 一般情况下, 能用循环做得事情, 用递归函数都能做
    // 但是要注意: 不是什么时候都使用递归, 递归要慎用(性能问题)
    // 什么是递归函数: 函数自己搞自己
   scanfNumber();
    // 注意: 递归一定要由一个明确的结束条件, 否则会造成死循环(无限循环
    return 0;
}
void scanfNumber()
{
    // 1.接收用户输入的值
    int number = -1;
    printf("请输入一个大于0的整数, 以回车结束\n");
    scanf("%i", &number);
    
    // 2.判断用户输入的值是否合法
    if (number < 0) {
        // 不合法, 需要重新输入
        // 函数可以自己调用自己
        scanfNumber();
    }else
    {
        printf("number = %i\n", number);
    }
}

你可能感兴趣的:(【C语言笔记】<五>函数)