Learning Path
浏览 C 语言 相关教程与章节。
主流编程语言、数据结构、设计模式、正则与基础算法。
教程
428
C 程序结构 在我们学习 C 语言的基本构建块之前,让我们先来看看一个最小的 C 程序结构,在接下来的章节中可以以此作为参考。 C Hello World 实例 C 程序主要包括以下部分: 预处理器指令 函数 变量 语句 & 表达式 注释 让我们看一段简单的代码,可以输出单词 'Hello World': 实例 [mycode3 type='cpp'] #inclu..
C 项目工程结构 C 项目工程结构是指组织 C 语言项目源代码、头文件、构建脚本和资源文件的目录布局方式。 一个清晰规范的工程结构,能让大型 C 项目易于维护、方便多人协作,并简化构建与部署流程。 为什么需要规范的工程结构 初学者写 C 代码时,往往把所有文件堆在一个目录里,这在项目变大后会带来严重问题。 头文件重复、命名冲突、编译缓慢、难以定位代码,这些混乱最终会让项目难以维护。 一套约定俗成的目录结构,能帮你和团队成员快速理解项..
C 递归 递归指的是在函数的定义中使用函数自身的方法。 举个例子: 从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?“从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?‘从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?……’” 语法格式如下: [mycode3 type='cpp'] void recursion() ..
C 从函数返回数组 C 数组 C 语言不允许返回一个完整的数组作为函数的参数。但是,您可以通过指定不带索引的数组名来返回一个指向数组的指针。我们将在下一章中讲解有关指针的知识,您可以先跳过本章,等了解了 C 指针的概念之后,再来学习本章的内容。 如果您想要从函数返回一个一维数组,您必须声明一个返回指针的函数,如下: [mycode3 type='cpp'] int * myFunction() { . . ..
C 从函数返回指针 C 指针 在上一章中,我们已经了解了 C 语言中如何从函数返回数组,类似地,C 允许您从函数返回指针。为了做到这点,您必须声明一个返回指针的函数,如下所示: int * myFunction() { . . . } 另外,C 语言不支持在调用函数时返回局部变量的地址,除非定义局部变量为 static 变量。 现在,让我们来看下面的函数,它会生成 10 个随机数,并使用表示指针的数组名(即第一个数组元素的地址..
C 安全函数 在 C 语言中,为了提高代码的安全性,尤其是防止缓冲区溢出等常见的安全问题,C11 标准引入了一些安全函数,也称为 Annex K 标准库函数。这些安全函数主要是标准字符串和内存操作函数的增强版本,通过增加参数(如缓冲区大小)来提供更好的错误检测和处理。 安全函数的特点: 缓冲区大小检查:所有的安全函数都要求传入目标缓冲区的大小参数,以防止缓冲区溢出。返回值检查:大多数函数返回 errno_t 类型的错误代码,可以检查函数..
C 作用域规则 任何一种编程中,作用域是程序中定义的变量所存在的区域,超过该区域变量就不能被访问。C 语言中有三个地方可以声明变量: 在函数或块内部的局部变量 在所有函数外部的全局变量 在形式参数的函数参数定义中 让我们来看看什么是局部变量、全局变量和形式参数。 局部变量 在某个函数或块的内部声明的变量称为局部变量。它们只能被该函数或该代码块内部的语句使用。局部变量在函数外部是不可知的。下面是使用局部变量的实例。在这里,所有..
C 排序算法 冒泡排序 冒泡排序(英语:Bubble Sort)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。 过程演示: 实例 [mycode3 type='cpp'] #include // 函数声明 void bubble_sort(int arr[], int len); int main() { ..
C 标准库 - <assert.h> 简介 C 标准库的 assert.h头文件提供了一个名为 assert 的宏,它可用于验证程序做出的假设,并在假设为假时输出诊断消息。 assert.h 标准库主要用于在程序运行时进行断言断言是一种用于测试假设的手段,通常用于调试阶段,以便在程序出现不符合预期的状态时立即发现问题。 <assert.h> 提供的断言机制是 C 语言中一个有用的..
C 标准库 <complex.h> <complex.h> 是 C 标准库中的一个头文件,用于支持复数运算。<complex.h> 在 C99 标准中引入,提供了一组用于定义和操作复数的类型、宏和函数。 1、复数类型 <complex.h> 定义了以下复数类型: float complex:单精..
C 标准库 - <ctype.h> 简介 C 标准库的 ctype.h 头文件提供了一些函数,可用于测试和转换字符,这些函数主要用于检查字符的类型(如字母、数字、空白字符等)以及进行字符大小写转换。 <ctype.h> 提供了一组方便的函数,用于处理字符的分类和转换操作,是 C 标准库中处理字符操作的重要工具。 以下是一个简单的示例,演示了如何使用 <ctype..
C 标准库 - <errno.h> 简介 C 标准库的 errno.h 头文件定义了整数变量 errno,它是通过系统调用设置的,在错误事件中的某些库函数表明了什么发生了错误。该宏扩展为类型为 int 的可更改的左值,因此它可以被一个程序读取和修改。 <errno.h> 是 C 标准库中的一个头文件,提供了一种在程序中报告和处理错误的机制。这个头文件定义了宏和变量,用于指示和描述..
C 标准库 <fenv.h> C 标准库 <fenv.h> <fenv.h> 是 C 标准库中的一个头文件,用于控制浮点环境(Floating-Point Environment)。 <fenv.h> 在 C99 标准中引入,提供了对浮点异常、舍入模式和其他浮点状态的控制和查询功能。 <fenv.h&..
C 标准库 - <float.h> 简介 <float.h> 是 C 标准库中的一个头文件,定义了与浮点数类型(float、double 和 long double)相关的宏。这些宏提供了浮点数的特性和限制,例如最大值、最小值、精度等。 C 标准库的 float.h 头文件包含了一组与浮点值相关的依赖于平台的常量。这些常量是由 ANSI C 提出的,这让程序更具有可移植性。在讲..
C 标准库 <inttypes.h> 在 C 语言编程中,处理整数类型时,我们经常需要确保代码在不同平台上的可移植性,不同的平台可能有不同的整数大小和表示方式,这可能导致代码在不同环境下表现不一致。 为了解决以上问题,C 标准库提供了<inttypes.h>头文件,它定义了一组固定大小的整数类型和相应的格式化宏,帮助开发者编写可移植的代码。 inttypes.h 是 C 标准库中..
C 标准库 - <limits.h> 简介 <limits.h> 是 C 标准库中的一个头文件,定义了各种数据类型的限制。这些宏提供了有关整数类型(char、short、int、long 和 long long 等)和其他数据类型的最大值和最小值的信息。 这些限制指定了变量不能存储任何超出这些限制的值,例如一个无符号可以存储的最大值是 255。 库宏 下面的值是特定实现的,且是..
C 标准库 - <locale.h> 简介 <locale.h> 是 C 标准库中的一个头文件,用于支持程序的国际化和本地化。它提供了一组函数和宏来设置或查询程序的本地化信息,例如日期、时间、货币、数字格式等。 接下来我们将介绍一些宏,以及一个重要的结构 struct lconv 和两个重要的函数。 库宏 下面列出了头文件 locale.h 中定义的宏,这些宏将在下列的两个函数..
C 标准库 - <math.h> 简介 math.h 头文件定义了各种数学函数和一个宏。在这个库中所有可用的功能都带有一个 double 类型的参数,且都返回 double 类型的结果。 <math.h> 是 C 标准库中的一个头文件,包含了大量用于数学运算的函数和宏。这些函数和宏提供了基本的算术运算、三角函数、指数函数、对数函数、幂函数、舍入函数等。 库宏 在 <..
C 标准库 - <setjmp.h> 简介 setjmp.h 头文件定义了宏 setjmp()、函数 longjmp() 和变量类型 jmp_buf,该变量类型会绕过正常的函数调用和返回规则。 <setjmp.h> 是 C 标准库中的一个头文件,提供了一组函数和宏,用于非本地跳转(即从一个函数跳转到另一个之前调用过的函数,而不需要正常的函数返回机制)。这种机制通常用于错误处理、异..
C 标准库 - <signal.h> 简介 <signal.h> 是 C 标准库中的一个头文件,用于处理信号。 signal.h 头文件定义了一个变量类型 sig_atomic_t、两个函数调用和一些宏来处理程序执行期间报告的不同信号。 信号是一种异步通知机制,允许进程在特定事件发生时执行预定义的处理函数。 下面是一个简单的示例程序,演示如何使用 signal 函数来捕捉 SI..
C 标准库 - <stdarg.h> <stdarg.h> 是 C 标准库中的一个头文件,提供了一组宏,用于访问可变数量的参数。 stdarg.h 头文件定义了一个变量类型 va_list 和三个宏,这三个宏可用于在参数个数未知(即参数个数可变)时获取函数中的参数。 可变参数的函数通在参数列表的末尾是使用省略号 ... 定义的。 库变量 下面是头文件 stdarg.h 中定义的..
C 标准库 <stdbool.h> 在 C99 标准之前,C 语言中通常使用整数类型(如 int)来表示布尔值。例如,0 表示假,非零值(通常是 1)表示真。这种方式虽然可行,但缺乏直观性和类型安全性。为了解决这个问题,C99 标准引入了 stdbool.h 头文件,定义了布尔类型和相关宏。 <stdbool.h> 是 C 语言中的一个标准头文件,定义了布尔类型及其相关的常量..
C 标准库 - <stddef.h> 简介 stddef .h 头文件定义了各种变量类型和宏,这些定义和宏主要用于内存管理、对象大小、和指针算术等方面。 库变量 下面是头文件 stddef.h 中定义的变量类型: 序号变量 & 描述 1ptrdiff_tptrdiff_t 是一种有符号整数类型,用于表示两个指针之间的差值。其定义同样依赖于实现,通常是 int 或 long。 ptrdif..
C 标准库 <stdint.h> <stdint.h> 是 C99 标准引入的头文件,它提供了一些整数类型的定义,这些类型具有明确的大小和符号属性,确保在不同平台上的一致性。 <stdint.h> 库是为了弥补 C 语言中不同平台整数类型大小不一致的问题,从而提高代码的可移植性和可维护性。<stdint.h> 主要用于定义固..