- 01 C 语言简介 历史 C 语言最初是作为 Unix 系统的开发工具而发明的。 1969年,美国贝尔实验室的肯·汤普森(Ken Thompson)与丹尼斯·里奇(Dennis Ritchie)一起开发了 Unix 操作系统。Unix... 4 年前
- 02 C 语言基本语法 语句 C 语言的代码由一行行语句(statement)组成。语句就是程序执行的一个操作命令。C 语言规定,语句必须使用分号结尾,除非有明确规定可以不写分号。 int x = 1; 上面就是一个变量声明语句,声明整数... 4 年前
- 03 变量 变量(variable)可以理解成一块内存区域的名字。通过变量名,可以引用这块内存区域,获取里面存储的值。由于值可能发生变化,所以称为变量,否则就是常量了。 变量名 变量名在 C 语言里面属于标识符(identif... 5 年前
- 04 运算符 C 语言的运算符非常多,一共有 50 多种,可以分成若干类。 算术运算符 算术运算符专门用于算术运算,主要有下面几种。 +:正值运算符(一元运算符) -:负值运算符(一元运算符) +:加法运算符(二元运算符) -:... 3 年前
- 05 流程控制 C 语言的程序是顺序执行,即先执行前面的语句,再执行后面的语句。开发者如果想要控制程序执行的流程,就必须使用流程控制的语法结构,主要是条件执行和循环执行。 if 语句 if语句用于条件判断,满足条件时,就执行指定的... 5 年前
- 06 数据类型 C 语言的每一种数据,都是有类型(type)的,编译器必须知道数据的类型,才能操作数据。所谓“类型”,就是相似的数据所拥有的共同特征,那么一旦知道某个值的数据类型,就能知道该值的特征和操作方式。 基本数据类型有三种... 2 年前
- 07 指针 指针是 C 语言最重要的概念之一,也是最难理解的概念之一。 简介 指针是什么?首先,它是一个值,这个值代表一个内存地址,因此指针相当于指向某个内存地址的路标。 字符 *表示指针,通常跟在类型关键字的后面,表示指针指... 3 年前
- 08 函数 简介 函数是一段可以重复执行的代码。它可以接受不同的参数,完成对应的操作。下面的例子就是一个函数。 int plus_one(int n) { return n + 1; } 上面的代码声明了一个函数 plus... 4 年前
- 09 数组 简介 数组是一组相同类型的值,按照顺序储存在一起。数组通过变量名后加方括号表示,方括号里面是数组的成员数量。 int scores[100]; 上面示例声明了一个数组 scores,里面包含100个成员,每个成员都... 4 年前
- 10 字符串 简介 C 语言没有单独的字符串类型,字符串被当作字符数组,即 char类型的数组。比如,字符串“Hello”是当作数组 {'H', 'e', 'l', 'l', 'o'}处理的。 编译器会给数组分配一段连续内存,所... 4 年前
- 11 C 语言的内存管理 简介 C 语言的内存管理,分成两部分。一部分是系统管理的,另一部分是用户手动管理的。 系统管理的内存,主要是函数内部的变量(局部变量)。这部分变量在函数运行时进入内存,函数运行结束后自动从内存卸载。这些变量存放的区... 2 年前
- 12 struct 结构 简介 C 语言内置的数据类型,除了最基本的几种原始类型,只有数组属于复合类型,可以同时包含多个值,但是只能包含相同类型的数据,实际使用中并不够用。 实际使用中,主要有下面两种情况,需要更灵活强大的复合类型。 复杂的... 4 年前
- 13 typedef 命令 简介 typedef命令用来为某个类型起别名。 typedef type name; 上面代码中, type代表类型名, name代表别名。 typedef unsigned char BYTE; BYTE c =... 5 年前
- 14 Union 结构 有时需要一种数据结构,不同的场合表示不同的数据类型。比如,如果只用一种数据结构表示水果的“量”,这种结构就需要有时是整数(6个苹果),有时是浮点数(1.5公斤草莓)。 C 语言提供了 Union 结构,用来自定义可... 3 年前
- 15 Enum 类型 如果一种数据类型的取值只有少数几种可能,并且每种取值都有自己的含义,为了提高代码的可读性,可以将它们定义为 Enum 类型,中文名为枚举。 enum colors {RED, GREEN, BLUE}; print... 4 年前
- 16 预处理器(Preprocessor) 简介 C 语言编译器在编译程序之前,会先使用预处理器(preprocessor)处理代码。 预处理器首先会清理代码,进行删除注释、多行语句合成一个逻辑行等工作。然后,执行 #开头的预处理指令。本章介绍 C 语言的预... 4 年前
- 17 I/O 函数 C 语言提供了一些函数,用于与外部设备通信,称为输入输出函数,简称 I/O 函数。输入(import)指的是获取外部数据,输出(export)指的是向外部传递数据。 缓存和字节流 严格地说,输入输出函数并不是直接与... 5 年前
- 18 文件操作 本章介绍 C 语言如何操作文件。 文件指针 C 语言提供了一个 FILE 数据结构,记录了操作一个文件所需要的信息。该结构定义在头文件 stdio.h,所有文件操作函数都要通过这个数据结构,获取文件信息。 开始操作... 2 年前
- 19 变量说明符 C 语言允许声明变量的时候,加上一些特定的说明符(specifier),为编译器提供变量行为的额外信息。它的主要作用是帮助编译器优化代码,有时会对程序行为产生影响。 const const说明符表示变量是只读的,不... 4 年前
- 20 多文件项目 简介 一个软件项目往往包含多个源码文件,编译时需要将这些文件一起编译,生成一个可执行文件。 假定一个项目有两个源码文件 foo.c和 bar.c,其中 foo.c是主文件, bar.c是库文件。所谓“主文件”,就是... 5 年前
- 21 命令行环境 命令行参数 C 语言程序可以从命令行接收参数。 $ ./foo hello world 上面示例中,程序 foo接收了两个命令行参数 hello和 world。 程序内部怎么拿到命令行参数呢?C 语言会把命令行输入... 3 年前
- 22 多字节字符 本章介绍 C 语言如何处理非英语字符。 Unicode 简介 C 语言诞生时,只考虑了英语字符,使用7位的 ASCII 码表示所有字符。ASCII 码的范围是0到127,也就是最多只能表示100多个字符,用一个字节... 4 年前
- 23 assert.h assert() assert.h头文件定义了宏 assert(),用于在运行时确保程序符合指定条件,如果不符合,就报错终止运行。这个宏常常被称为“断言”。 assert(PI > 3); 上面代码在程序运行到这一... 4 年前
- 24 ctype.h ctype.h头文件定义了一系列字符处理函数的原型。 字符测试函数 这些函数用来判断字符是否属于某种类型。 isalnum():是否为字母数字 isalpha():是否为字母 isdigit():是否为数字 isx... 5 年前
- 25 errno.h errno 变量 errno.h声明了一个 int 类型的 errno 变量,用来存储错误码(正整数)。 如果这个变量有非零值,表示已经执行的程序发生了错误。 int x = -1; errno = 0; int ... 5 年前
- 26 float.h float.h定义了浮点数类型 float、double、long double 的一些宏,规定了这些类型的范围和精度。 (1) FLT_ROUNDS 宏 FLT_ROUNDS表示当前浮点数加法的四舍五入方向。 ... 4 年前
- 27 inttypes.h C 语言还在头文件 inttypes.h 里面,为 stdint.h 定义的四类整数类型,提供了 printf()和 scanf()的占位符。 固定宽度整数类型,比如 int8_t。 最小宽度整数类型,比如 int... 5 年前
- 28 iso646.h iso646.h头文件指定了一些常见运算符的替代拼写。比如,它用关键字 and代替逻辑运算符 &&。 if (x > 6 and x < 12) // 等同于 if (x > 6 && x < 12) 它定义的替代... 5 年前
- 29 limits.h limits.h提供了用来定义各种整数类型(包括字符类型)取值范围的宏。 CHAR_BIT:每个字符包含的二进制位数。 SCHAR_MIN:signed char 类型的最小值。 SCHAR_MAX:signed ... 5 年前
- 30 locale.h 简介 locale.h是程序的本地化设置,主要影响以下的行为。 数字格式 货币格式 字符集 日期和时间格式 它设置了以下几个宏。 LC_COLLATE:影响字符串比较函数 strcoll()和 strxfrm()。... 3 年前
- 31 math.h math.h头文件提供了很多数学函数。 很多数学函数的返回值是 double 类型,但是同时提供 float 类型与 long double 类型的版本,比如 pow()函数就还有 powf()和 powl()版本... 4 年前
- 32 signal.h 简介 signal.h提供了信号(即异常情况)的处理工具。所谓“信号”(signal),可以理解成系统与程序之间的短消息,主要用来表示运行时错误,或者发生了异常事件。 头文件 signal.h定义了一系列宏,表示不... 5 年前
- 33 stdint.h 固定宽度的整数类型 stdint.h 定义了一些固定宽度的整数类型别名,主要有下面三类。 宽度完全确定的整数 intN_t,比如 int32_t。 宽度不小于某个大小的整数 int_leastN_t,比如 int_... 4 年前
- 34 stdlib.h 类型别名和宏 stdlib.h 定义了下面的类型别名。 size_t:sizeof 的返回类型。 wchar_t:宽字符类型。 stdlib.h 定义了下面的宏。 NULL:空指针。 EXIT_SUCCESS:函数... 4 年前
- 35 stdio.h stdio.h是 C 语言的标准 I/O 库,用于读取和写入文件,也用于控制台的输入和输出。 标准 I/O 函数 以下函数用于控制台的输入和输出。 printf():输出到控制台,详见《基本语法》一章。 scanf... 4 年前
- 36 string.h string.h主要定义了字符串处理函数和内存操作函数。 字符串处理函数 以下字符串处理函数,详见《字符串》一章。 strcpy():复制字符串。 strncpy():复制字符串,有长度限制。 strcat():连... 5 年前
- 37 time.h time_t time_t 是一个表示时间的类型别名,可以视为国际标准时 UTC。它可能是浮点数,也可能是整数,Unix 系统一般是整数。 许多系统上,time_t 表示自时间纪元(time epoch)以来的秒数... 5 年前
- 38 wchar.h 宽字符使用两个或四个字节表示一个字符,导致 C 语言常规的字符处理函数都会失效。wchar.h 定义了许多宽字符专用的处理函数。 类型别名和宏 wchar.h 定义了一个类型别名 wint_t,表示宽字符对应整数值... 5 年前
- 39 wctype.h wctype.h 提供 ctype.h 里面函数的宽字符版本。 宽字符类型判断函数 下面函数判断宽字符的类型。 iswalnum() 测试宽字符是否为字母数字 iswalpha() 测试宽字符是否为字母 iswbl... 5 年前
- 40 stdarg.h stdarg.h定义于函数的可变参数相关的一些方法。 va_list 类型 va_start() va_arg():获取当前参数 va_end()。 va_copy():it makes a copy of you... 5 年前
- 41 stdbool.h stdbool.h头文件定义了4个宏。 bool:定义为 _Bool。 true:定义为1。 false:定义为0。 __bool_true_false_are_defined:定义为1。 bool isEven(... 5 年前
- 42 stddef.h stddef.h提供了常用类型和宏的定义,但没有声明任何函数。 这个头文件定义的类型如下。 ptrdiff_t:指针相减运算时,返回结果的数据类型。 size_t: sizeof运算符返回的类型。 wchar_t:... 5 年前