C语言函数:从库函数到自定义函数

1. 函数的概念

函数是C语言程序的基本模块,类似于数学中的函数,接收输入参数并返回结果。

  • 核心作用:将复杂任务拆解为多个小任务,提高代码复用性和可维护性。
  • 分类
    • 库函数:由标准库提供(如printf、scanf)。
    • -自定义函数:程序员根据需求编写。

2. 库函数

1 标准库和头文件

  • 标准库:ANSI C定义的一组常用函数,如stdio.h(输入输出)、math.h(数学计算)。
  • 头文件:包含函数声明,使用库函数前需包含对应头文件。
#include <math.h>  // 使用sqrt函数需包含math.h

2 库函数的使用方法

  • 以计算平方根函数sqrt为例:
#include <stdio.h>
#include <math.h>

int main() {
    double d = 16.0;
    double r = sqrt(d);  // 调用sqrt计算平方根
    printf("%lf\n", r);  // 输出:4.000000
    return 0;
}
  • 函数原型:double sqrt(double x);
  • 功能:计算x的平方根,返回double类型结果。

3. 自定义函数

1 语法形式

返回类型 函数名(参数列表) {
    // 函数体
}
  • 示例:实现加法函数
int Add(int x, int y) {
    return x + y;
}

4. 形参和实参

  • 实参:调用函数时传递的实际参数(如Add(a, b)中的a和b)。
  • 形参:函数定义时声明的参数(如Add(int x, int y)中的x和y)。
  • 关系:形参是实参的临时拷贝,二者独立存储。

5. return语句

  • 返回结果,结束函数执行。
  • ​注意事项
    • 返回值类型需与函数声明一致。
    • return后的代码不会执行。
    • void函数可省略返回值。

6. 数组做函数参数

数组作为参数传递时,传递的是首元素地址,需额外传递数组长度:

void SetArray(int arr[], int sz) {
    for (int i = 0; i < sz; i++) {
        arr[i] = -1;
    }
}
  • 特点:形参数组与实参数组共享内存。

7. 嵌套调用与链式访问

1 嵌套调用

函数间互相调用,如判断某月天数:

int is_leap_year(int y);  // 判断闰年
int get_days_of_month(int y, int m) {
    if (is_leap_year(y) && m == 2) {  // 嵌套调用
        return 29;
    }
    // ...
}

2 链式访问

函数返回值作为另一函数的参数:

printf("%d\n", strlen("abc"));  // 输出:3

8. 函数的声明和定义

1 单文件编程

  • 声明:告知编译器函数的存在(需在调用前声明)。
  • 定义:实现函数功能。
// 函数声明
int Add(int x, int y);

int main() {
    int r = Add(2, 3);  // 调用
    // ...
}

// 函数定义
int Add(int x, int y) {
    return x + y;
}

2 多文件编程

  • 头文件(.h)​:存放函数声明。
  • ​源文件(.c)​:存放函数实现。
// add.h
int Add(int x, int y);

// add.c
#include "add.h"
int Add(int x, int y) {
    return x + y;
}

9. static和extern

1 static修饰符

  • 局部变量:延长生命周期至程序结束(存储在静态区)。
void test() {
    static int i = 0;  // 只初始化一次
    i++;
}
  • 全局变量/函数:限制作用域为当前文件

2 extern声明符

  • 声明外部文件定义的全局变量或函数。
// file1.c
int g_val = 100;

// file2.c
extern int g_val;  // 声明外部变量
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值