C语言---函数

自定义函数

函数调用

数组元素作为函数参数

数组作为函数的参数

二维数组作为函数的参数


C语言中的函数

函数的"地位"

C语言:以函数为主体

别称:

  • "代码块"

  • "工具"

每一个具体的功能,都可以写成一个函数

自定义函数

语法格式

返回值类型 函数名(形参表) // 函数头 
{ 
    函数体; 
    return 返回值; 
}

解释

返回值类型: 反馈 可以没有,可以为空(void)

函数名: 合法标识符(一般都是动词)

形参表: 规定参数格式(可以为空) (类型1 参数名1,类型2 参数2,....类型n 参数n)

函数体: 代码(逻辑)

返回值: C语言中 函数只允许最多一个返回值

例子:

// 形参表: (类型1 参数名1,类型2 参数2,....类型n 参数n) 
int add(int x, int y) 
{ 
    int n; 
    n = x + y; 
    return n; 
}
​
int jian(int x, int y) 
{ 
    int n; 
    n = x - y;
    return n; 
}
​
void eat() 
{ 
    printf("鸡汤来喽!!!\n"); 
}

函数调用

函数名(实参表)

实参表: 实际的参数

调用流程

  1. 从主调函数进入被调函数

  2. 系统给形参分配临时内存,将实参的值拷贝给形参 ==> 函数定义时 形参没有内存

  3. 进入被调函数,执行函数体

  4. 系统回收临时内存

  5. 回到主调函数,有返回值的,带回返回值

用法

  1. 可以作为一个独立语句

  2. 如果有返回值 可以做右值

  3. 可以直接用于打印

  4. 有返回值的 可以做实参 (链式操作)

  5. 可以作为判断条件

  6. .....

#include <stdio.h> 
// 形参表: (类型1 参数名1,类型2 参数2,....类型n 参数n) 
int add(int x, int y) 
{ 
    int n; 
    n = x + y; 
    return n; 
}
​
int jian(int x, int y) 
{ 
    int n;
    n = x - y; 
    return n; 
}
​
void eat() 
{ 
    printf("鸡汤来喽!!!\n"); 
}
​
int main() 
{ 
    eat(); 
    int num = add(3, 4); 
    printf("num = %d\n", num); 
    printf("%d\n", add(3, 4)); 
    add(3, add(1, 2)); 
    if (add(5,6) > 10) 
    { 
        printf(">10\n"); 
    }
    return 0; 
}

函数声明

返回值类型 函数名(形参表);

当函数的定义在调用之后,需要在调用之前,对函数进行声明

数组元素作为函数参数

#include <stdio.h> 
/* 函数声明 */ 
int getMax(int x, int y); 
​
int main() 
{ 
    // 1 定义一个数组 
    int arr[5] = { 1, 2, 14, 5, 9 };
    int max = -1; 
    // 3 得到数组元素的最大值 
    for (size_t i = 0; i < 5; i++) 
    { 
        max = getMax(max, arr[i]); 
    }
    printf("max = %d\n", max); 
    return 0; 
}
​
/* 函数定义 */ 
// 2 比较两个数的大小 
int getMax(int x, int y) 
{ 
    if (x > y) 
    return x; 
    return y; 
}

数组作为函数的参数

可以不指定长度

数组名会"弱化"为指针

#include <stdio.h> 
/* 函数声明 */ 
void function(int a[], int length); 
int main() 
{ 
    int arr[5] = { 1, 2, 14, 5, 9 }; 
    function(arr, 5); 
    return 0; 
}
​
/* 函数定义 */ 
void function(int a[],int length) 
{ 
    for (size_t i = 0; i < length; i++) 
    { 
        printf("a[%d]: %d\n", i, a[i]); 
    } 
}
/*
    现象: sizeof(a)/sizeof(a[0]) ==> 1 
    原因: 这里的a 看似是数组名实际上不是的 
    描述: 数组名做函数参数时会"弱化"为指针 
*/

二维数组作为函数的参数

行数可以不指定 但是列数必须指定

#include <stdio.h> 
/* 函数声明 */ 
void fun1(int a[3][4]); 
void fun2(int a[][4]); 
​
int main() 
{ 
    int map[3][4] = { 
        1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 
    };
    fun1(map); 
    printf("***************\n"); 
    fun2(map); 
    return 0; 
}
​
/* 函数定义 */ 
void fun1(int a[3][4]) 
{ 
    for (size_t i = 0; i < 3; i++) 
    { 
        for (size_t j = 0; j < 4; j++) 
        { 
            printf("%3d", a[i][j]); 
        }
        printf("\n"); 
    } 
}
​
void fun2(int a[][4]) 
{ 
    for (size_t i = 0; i < 3; i++) 
    { 
        for (size_t j = 0; j < 4; j++) 
        { 
            printf("%3d", a[i][j]); 
        }
        printf("\n"); 
    } 
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值