1135 字
6 分钟
【C语言入门】05 - 函数

【C语言入门学习】函数的概念#

前言#

在数学中,函数是核心思想之一;同样,在计算机语言中,函数也是编程的核心思想。函数通过将代码结构化,帮助我们简化复杂的程序逻辑。


一、函数的定义#

根据维基百科的定义:子程序,子程序是计算机程序中负责完成某项特定任务的一段代码。它由一个或多个语句块组成,相较于其他代码,具备较高的独立性。子程序通常有输入参数和返回值,提供过程的封装与细节的隐藏,且多被集成为软件库中的函数。


二、函数的分类#

  • 库函数
  • 自定义函数

为什么需要库函数?#

C语言的标准库中提供了大量的库函数,旨在减少重复编写常用功能的代码,避免重复造轮子。库函数帮助我们高效地解决常见问题,提高开发效率。

如何查找库函数?#

以下是常用的库函数查询网站:

提示:cppreference 支持在 Edge 浏览器中安装插件,URL 搜索框中输入 “cc”+“空格” 可以快速查询函数的定义、使用方式及对应的封装库。

常见的库函数#

  • IO函数:如 printfscanf
  • 字符串操作函数:如 strlen
  • 字符操作函数
  • 内存操作函数
  • 时间/日期函数
  • 数学函数
  • 其他库函数

示例代码#

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
int main1() {
// 库函数的应用示例
char arr1[20] = {0};
char arr2[] = "hello world";
// 字符串拷贝
strcpy(arr1, arr2);
printf("%s\n", arr1);
// 设置内存块
memset(arr1, 'x', 5);
printf("%s\n", arr1);
return 0;
}

在C语言中,库函数的使用需要通过 #include 指令包含相应的头文件:

  • #include < >:用于引用标准库头文件,路径指向编译器的标准库目录。
  • #include " ":用于引用自定义头文件,路径指向工程目录。

三、自定义函数#

编写自定义函数可以根据具体需求设计功能,增强代码的灵活性,提升代码重用率和可读性。

函数的基本结构:

返回值类型 函数名(形参列表) {
// 函数体
return 返回值; // 如需要返回值
}


示例1:找出两个数中的最大值#

int get_max(int x, int y) {
int z = 0;
if (x > y)
z = x;
else
z = y;
return z; // 返回最大值z
}

示例2:交换两个数的值#

Swap1:不通过指针交换值#

void Swap1(int x, int y) {
int temp = x;
x = y;
y = temp;
}

Swap2:通过指针交换值#

void Swap2(int* pa, int* pb) {
int temp = *pa; // 解引用,获取pa指向的值
*pa = *pb; // 交换两者的值
*pb = temp;
}

主函数示例#

int main() {
int a = 10;
int b = 20;
// 使用get_max函数获取最大值
int max = get_max(a, b);
printf("%d\n", max); // 输出最大值
// 交换两个整型变量的值
printf("交换前:a=%d b=%d\n", a, b);
Swap1(a, b); // 形参不影响实参
printf("交换后:a=%d b=%d\n", a, b); // 无法交换成功
int* pa = &a; // pa是指向a的指针
*pa = 15; // 通过指针修改a的值
printf("%d\n", a); // 输出修改后的a
printf("交换前:a=%d b=%d\n", a, b);
Swap2(&a, &b); // 通过指针传递,交换值
printf("交换后:a=%d b=%d\n", a, b); // 成功交换
return 0;
}

示例1 运行结果#

20

解释get_max 函数正确返回了较大的数。


示例2 运行结果1#

交换前:a=10 b=20
交换后:a=10 b=20

问题分析

  • Swap1 函数无法成功交换两个变量的值,因为传递给函数的实参被复制为形参,函数内部修改的仅是形参,不会影响原实参。

示例2 运行结果2#

15
交换前:a=15 b=20
交换后:a=20 b=15

问题解决

  • Swap2 函数通过指针操作了实参的内存地址,从而实现了变量交换。指针使得函数可以直接操作变量的值,而不是操作拷贝的形参。

板书总结#


总结#

  1. 掌握库函数:养成查阅库函数文档的习惯,学会利用工具来提高编程效率。
  2. 理解形参与实参的区别:函数中的形参是实参的拷贝,改变形参不会影响实参,除非通过指针传递内存地址。
  3. 学会自定义函数:通过定义自定义函数,编写更加灵活和可维护的代码。
【C语言入门】05 - 函数
http://www.turinblog.cn/posts/c语言入门05---函数/
作者
Szturin
发布于
2024-02-23
许可协议
CC BY-NC-SA 4.0