当前位置: 首页 > article >正文

C语言函数学习笔记

1. 函数的定义

函数(Function)是一个具有特定功能的代码块,通过函数名调用执行。函数可以接受参数并返回值,便于代码重用和模块化。

2. 函数的基本结构

一个函数的基本结构包括函数声明、函数定义和函数调用。

2.1 函数声明

函数声明也称为函数原型,用于告诉编译器函数的名称、返回类型和参数类型。

返回类型 函数名(参数类型 参数名, ...);

例如:

int add(int a, int b);

2.2 函数定义

函数定义包含函数的具体实现,包括函数体。

返回类型 函数名(参数类型 参数名, ...) {
    // 函数体
    return 返回值;
}

例如:

int add(int a, int b) {
    return a + b;
}

2.3 函数调用

函数调用是指在程序中使用函数名和参数来执行函数。

返回值 = 函数名(参数值, ...);

例如:

int sum = add(3, 5);

3. 函数的参数传递

3.1 值传递

在值传递中,函数接受参数的副本,对参数的修改不会影响原始数据。

void changeValue(int x) {
    x = 10;
}

int main() {
    int a = 5;
    changeValue(a);
    printf("%d\n", a); // 输出5,原始数据未被修改
    return 0;
}

3.2 引用传递

在引用传递中,函数接受参数的地址,对参数的修改会影响原始数据。

void changeValue(int *x) {
    *x = 10;
}

int main() {
    int a = 5;
    changeValue(&a);
    printf("%d\n", a); // 输出10,原始数据被修改
    return 0;
}

4. 函数的返回值

函数可以返回一个值,也可以不返回值。

4.1 返回值函数

返回值函数在函数定义中指定返回类型,并使用return语句返回值。

int add(int a, int b) {
    return a + b;
}

4.2 无返回值函数

无返回值函数的返回类型为void,不使用return语句返回值。

void printMessage() {
    printf("Hello, World!\n");
}

5. 递归函数

递归函数是指在函数内部调用自身的函数。递归需要一个终止条件,以避免无限递归。

int factorial(int n) {
    if (n == 0) {
        return 1;
    } else {
        return n * factorial(n - 1);
    }
}

int main() {
    int result = factorial(5);
    printf("%d\n", result); // 输出120
    return 0;
}

6. 函数指针

函数指针是指向函数的指针,可以通过函数指针调用函数。

#include <stdio.h>

void hello() {
    printf("Hello, World!\n");
}

int main() {
    void (*func_ptr)() = hello; // 声明并初始化函数指针
    func_ptr(); // 通过函数指针调用函数
    return 0;
}

7. 标准库函数

C语言提供了一些常用的标准库函数,例如:

  • printf:格式化输出
  • scanf:格式化输入
  • strlen:计算字符串长度
  • strcpy:复制字符串
  • strcmp:比较字符串
  • malloc:动态内存分配
  • free:释放动态内存

8. 变量的存储类型

C语言提供了四种变量的存储类型,用于控制变量的生命周期、存储位置和作用域。

8.1 自动变量(auto)

自动变量是函数内的局部变量,默认存储类型为auto,在函数调用时创建,函数结束时销毁。

void function() {
    auto int a = 10; // 自动变量
    printf("%d\n", a);
}

8.2 静态变量(static)

静态变量在函数内定义时,使用static关键字,具有局部作用域,但在程序运行期间保持其值。

void function() {
    static int count = 0; // 静态变量
    count++;
    printf("Count: %d\n", count);
}

8.3 寄存器变量(register)

寄存器变量使用register关键字声明,提示编译器将变量存储在CPU寄存器中,以提高访问速度,但编译器不一定会采纳这个建议。

void function() {
    register int counter = 0; // 寄存器变量
    for (int i = 0; i < 1000; i++) {
        counter += i;
    }
    printf("Counter: %d\n", counter);
}

8.4 外部变量(extern)

外部变量在所有函数外部定义,具有全局作用域,使用extern关键字在其他文件中引用。

int globalVar = 100; // 外部变量

void function() {
    extern int globalVar;
    printf("Global Variable: %d\n", globalVar);
}

http://www.kler.cn/a/560123.html

相关文章:

  • 能不能用Ai来开发出一款APP?很早就想过能不能用Ai来开发出一款APP?
  • 智慧物业平台(springboot小程序论文源码调试讲解)
  • 【GESP】C++二级模拟 luogu-b3995, [GESP 二级模拟] 小洛的田字矩阵
  • 【学习笔记16】Java中常见的Exception(异常)
  • 求解动态完全未知的连续时间非线性系统的优化控制的全局自适应动态规划算法
  • 网络安全中CIA模型是指 模型有何作用?
  • GMII(Gigabit Media Independent Interface)详解
  • 华为认证证书是什么?有什么用?
  • 人工智能基础之数学基础:03泰勒公式与拉格朗日
  • java23种设计模式-组合模式
  • 布隆过滤器:一种简单而高效的集合查询方法
  • Tomcat安装与环境变量配置(图文详解)
  • 遗传算法初探
  • MATLAB中eraseBetween函数用法
  • 【OS安装与使用】part5-ubuntu22.04基于conda安装pytorch+tensorflow
  • 从启动说起到单片机点灯发生了什么上——库层次
  • 分析 w-form-multiple-image.vue 文件中 console.log(v) 打印的内容
  • VScode 开发
  • Serilog详解
  • 2024-2025 学年广东省职业院校技能大赛 “信息安全管理与评估”赛项 技能测试试卷(一)