Learning Path
浏览 C 语言 相关教程与章节。
主流编程语言、数据结构、设计模式、正则与基础算法。
教程
428
C 循环 有的时候,我们可能需要多次执行同一块代码。一般情况下,语句是按顺序执行的:函数中的第一个语句先执行,接着是第二个语句,依此类推。 编程语言提供了更为复杂执行路径的多种控制结构。 循环语句允许我们多次执行一个语句或语句组,下面是大多数编程语言中循环语句的流程图: 循环类型 C 语言提供了以下几种循环类型。点击链接查看每个类型的细节。 循环类型描述 while 循环当给定条件为真时,重复语句或语句组。它会在执行循环主..
C 库宏 - assert() C 标准库 - <assert.h> 描述 C 库宏 void assert(int expression) 允许诊断信息被写入到标准错误文件中,换句话说,它可用于在 C 程序中添加诊断。 assert() 是 C 标准库中的一个宏,定义在 <assert.h> 头文件中。它用于在程序运行时检查某个表达式是否为真。如果该表达式为假,asser..
C 库宏 - EDOM C 标准库 - <errno.h> 描述 C 库宏 EDOM 表示一个域错误,它在输入参数超出数学函数定义的域时发生,errno 被设置为 EDOM。 EDOM 是 C 标准库中的一个宏,定义在 <errno.h> 头文件中。它用于表示数学函数参数域错误,即函数参数超出了数学定义域。这通常发生在数学库函数(如 sqrt、log、asin 等)接收到非..
C 库宏 - ERANGE C 标准库 - <errno.h> 描述 C 库宏 ERANGE 表示一个范围错误,它在输入参数超出数学函数定义的范围时发生,errno 被设置为 ERANGE。ERANGE 是 C 标准库中的一个宏,定义在 <errno.h> 头文件中。它用于表示结果超出函数定义范围的错误,通常发生在数学函数和转换函数的计算结果超出可表示的范围时。 声明 下面是..
C 库宏 - errno C 标准库 - <errno.h> 描述 C 库宏 extern int errno 是通过系统调用设置的,在错误事件中的某些库函数表明了什么发生了错误。 errno 是 C 标准库中的一个宏,定义在 <errno.h> 头文件中。它用于指示在程序运行过程中发生的错误。errno 实际上是一个整数变量,用于存储错误代码。库函数在发生错误时,会设置 e..
C 库宏 - NULL C 标准库 - <stddef.h> 描述 C 库宏 NULL 是一个空指针常量的值。 NULL 是一个宏,表示空指针常量。它通常被定义为 ((void*)0),表示一个指向内存地址 0 的空指针。在 C++ 中,NULL 可能被定义为 0 或 0L,以便与整数 0 进行比较。 声明 下面是取决于编译器的 NULL 宏的声明。 #define NULL ((char *)0) ..
C 库宏 - offsetof() C 标准库 - <stddef.h> 描述 C 库宏 offsetof(type, member-designator) 会生成一个类型为 size_t 的整型常量,它是一个结构成员相对于结构开头的字节偏移量。成员是由 member-designator 给定的,结构的名称是在 type 中给定的。 声明 下面是 offsetof() 宏的声明。 offsetof(..
C 库宏 - setjmp() C 标准库 - <setjmp.h> setjmp() 是 C 标准库 <setjmp.h> 中的一个宏,用于保存当前的程序执行状态,以便在稍后的某个时候通过 longjmp() 来返回到该状态。 C 库宏 int setjmp(jmp_buf environment) :创建本地的 jmp_buf 缓冲区并且初始化,用于将来跳转回此..
C 库宏 - va_arg() C 标准库 - <stdarg.h> va_arg 宏是 C 标准库 <stdarg.h> 头文件中的一个宏,用于在可变参数函数中依次获取每个可变参数的值。它在使用 va_start 宏初始化了 va_list 变量之后,用于访问可变参数列表中的下一个参数。 声明 下面是 va_arg() 宏的声明。 type va_arg(va_list ..
C 库宏 - va_end() C 标准库 - <stdarg.h> va_end 宏是 C 标准库 <stdarg.h> 头文件中的一个宏,用于清理 va_list 变量,并使其不再指向任何有效的内存位置。它在可变参数函数的末尾使用,以结束可变参数的处理。 C 库宏 void va_end(va_list ap) 允许使用了 va_start 宏的带有可变参数的函数返回。如..
C 库宏 - va_start() C 标准库 - <stdarg.h> 描述 va_start 宏是 C 标准库 <stdarg.h> 头文件中的一个宏,用于初始化一个 va_list 变量,以便在可变参数函数中访问可变数量的参数。 C 库宏 void va_start(va_list ap, last_arg) 初始化 ap 变量,它与 va_arg 和 va_end 宏..
C 内存管理 本章将讲解 C 中的动态内存管理。C 语言为内存的分配和管理提供了几个函数。这些函数可以在 <stdlib.h> 头文件中找到。 在 C 语言中,内存是通过指针变量来管理的。指针是一个变量,它存储了一个内存地址,这个内存地址可以指向任何数据类型的变量,包括整数、浮点数、字符和数组等。C 语言提供了一些函数和运算符,使得程序员可以对内存进行操作,包括分配、释放、移动和复制等。 序号函数..
C 多维数组 C 数组 C 语言支持多维数组。多维数组声明的一般形式如下: type name[size1][size2]...[sizeN]; 例如,下面的声明创建了一个三维 5 . 10 . 4 整型数组: int threedim[5][10][4]; 二维数组 多维数组最简单的形式是二维数组。一个二维数组,在本质上,是一个一维数组的列表。声明一个 x 行 y 列的二维整型数组,形式如下: type arra..
C 嵌套 if 语句 C 判断 在 C 语言中,嵌套 if-else 语句是合法的,这意味着您可以在一个 if 或 else if 语句内使用另一个 if 或 else if 语句。 语法 C 语言中 嵌套 if 语句的语法: if( boolean_expression 1) { /* 当布尔表达式 1 为真时执行 */ if(boolean_expression 2) { /* 当布尔表达式..
C 嵌套循环 C 循环 C 语言允许在一个循环内使用另一个循环,下面演示几个实例来说明这个概念。 语法 C 语言中 嵌套 for 循环 语句的语法: for (initialization; condition; increment/decrement) { statement(s); for (initialization; condition; increment/decrement) { ..
C 嵌套 switch 语句 C 判断 您可以把一个 switch 作为一个外部 switch 的语句序列的一部分,即可以在一个 switch 语句内使用另一个 switch 语句。即使内部和外部 switch 的 case 常量包含共同的值,也没有矛盾。 语法 C 语言中 嵌套 switch 语句的语法: switch(ch1) { case 'A': printf('这..
C 运算符 运算符是一种告诉编译器执行特定的数学或逻辑操作的符号。C 语言内置了丰富的运算符,并提供了以下类型的运算符: 算术运算符 关系运算符 逻辑运算符 位运算符 赋值运算符 杂项运算符 本章将逐一介绍算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符和其他运算符。 算术运算符 下表显示了 C 语言支持的所有算术运算符。假设变量 A 的值为 10,变量 B 的值为 20,则: 运算符描述实例 +把两个操作数相加 ..
C 传递数组给函数 C 数组 如果您想要在函数中传递一个一维数组作为参数,您必须以下面三种方式来声明函数形式参数,这三种声明方式的结果是一样的,因为每种方式都会告诉编译器将要接收一个整型指针。同样地,您也可以传递一个多维数组作为形式参数。 方式 1 形式参数是一个指针(您可以在下一章中学习到有关指针的知识): [mycode3 type='cpp'] void myFunction(int *param) ..
C 传递指针给函数 C 指针 C 语言允许您传递指针给函数,只需要简单地声明函数参数为指针类型即可。 下面的实例中,我们传递一个无符号的 long 型指针给函数,并在函数内改变这个值: 实例 [mycode4 type='c'] #include #include void getSeconds(unsigned long *par); int main () { unsigned long ..
C 指针的算术运算 C 指针 C 指针是一个用数值表示的地址。因此,您可以对指针执行算术运算。可以对指针进行四种算术运算:++、--、+、-。 假设 ptr 是一个指向地址 1000 的整型指针,是一个 32 位的整数,让我们对该指针执行下列的算术运算: ptr++ 在执行完上述的运算之后,ptr 将指向位置 1004,因为 ptr 每增加一次,它都将指向下一个整数位置,即当前位置往后移 4 字节。这个运算会在不影响内存位置..
C 指向数组的指针 C 数组 您可以先跳过本章,等了解了 C 指针的概念之后,再来学习本章的内容。 如果您对 C 语言中指针的概念有所了解,那么就可以开始本章的学习。 组名本身是一个常量指针,意味着它的值是不能被改变的,一旦确定,就不能再指向其他地方。因此,在下面的声明中: double balance[50]; balance 是一个指向 &balance[0] 的指针,即数组 balance 的第一个元素的..
C 指向指针的指针 C 指针 指向指针的指针是一种多级间接寻址的形式,或者说是一个指针链。通常,一个指针包含一个变量的地址。当我们定义一个指向指针的指针时,第一个指针包含了第二个指针的地址,第二个指针指向包含实际值的位置。 一个指向指针的指针变量必须如下声明,即在变量名前放置两个星号。例如,下面声明了一个指向 int 类型指针的指针: int **var; 当一个目标值被一个指针间接指向到另一个指针时,访问这个值需要使用两个..
C 指针 学习 C 语言的指针既简单又有趣。通过指针,可以简化一些 C 编程任务的执行,还有一些任务,如动态内存分配,没有指针是无法执行的。所以,想要成为一名优秀的 C 程序员,学习指针是很有必要的。 正如您所知道的,每一个变量都有一个内存位置,每一个内存位置都定义了可使用 & 运算符访问的地址,它表示了在内存中的一个地址。 请看下面的实例,它将输出定义的变量地址: 实例 [mycode3 type='..
C 预处理器 C 预处理器(CPP)是编译过程中的独立阶段,在实际编译前对源代码进行文本处理。主要功能包括: 宏展开 文件包含 条件编译 特殊指令处理 C 预处理器不是编译器的组成部分,但是它是编译过程中一个单独的步骤。简言之,C 预处理器只不过是一个文本替换工具而已,它们会指示编译器在实际编译之前完成所需的预处理。我们将把 C 预处理器(C Preprocessor)简写为 CPP。 所有的预..