16k 14 分钟

该系列为本人的学习笔记,主要由本人整理书写而成。部分内容来自教材、视频课程等,不能保证完全原创性。 萌新的学习笔记,写错了恳请斧正。 # 从源代码到运行 在 ANSI C 的标准中,源代码先经过翻译环境生成可执行程序,再于运行环境中执行 # 翻译环境 翻译环境由编译与链接两个过程组成 一个 C 语言项目可能存在多个. c 文件,在编译的过程中,编译器处理每个. c 文件产生对应的目标文件(在 Windows 下目标文件后缀默认为. obj,Linux 下默认为. o) 在链接的过程中,多个目标文件和链接库一起经过链接器最终生成一个可执行程序文件 #...
3.7k 3 分钟

该系列为本人的学习笔记,主要由本人整理书写而成。部分内容来自教材、视频课程等,不能保证完全原创性。 萌新的学习笔记,写错了恳请斧正。 # scanf/fscanf/sscanf #include <stdio.h>int scanf( const char* format, ... );int fscanf( FILE* stream, const char* format, ... );int sscanf( const char* buffer, const char* format, ......
3.2k 3 分钟

该系列为本人的学习笔记,主要由本人整理书写而成。部分内容来自教材、视频课程等,不能保证完全原创性。 萌新的学习笔记,写错了恳请斧正。 # 文件的随机读写 文件的随机读写是指我们可以控制文件位置指示器(光标)的位置,以完成复杂的读写操作 # fseek #include <stdio.h>int fseek( FILE* stream, long offset, int origin );fseek 函数用于移动文件位置指示器(光标)的位置,移动成功则返回 0,发生错误则光标位置不变、返回非 0 整数并设置流结构体上的错误指示器。 其中,origin...
3.6k 3 分钟

该系列为本人的学习笔记,主要由本人整理书写而成。部分内容来自教材、视频课程等,不能保证完全原创性。 萌新的学习笔记,写错了恳请斧正。 # 光标 (文件位置指示器) 我们平常打字的时候就知道光标这个概念,而程序在打开文件后也是有一个光标,用于控制文件的读写。我们一般说文件指针指向文件的哪个位置,其实就是光标 (文件位置指示器) 指向文件的某个位置,而这个信息也是保存在对应流的结构体中的。 读和写操作都是从光标的位置进行,而光标的位置也随着读写移动 # 文件的顺序读写 文件的顺序读写就是从光标的位置开始,按顺序向后读写内容 文件顺序读写时我们没法随意控制光标的位置,只能让系统自己控制光标 #...
3.9k 4 分钟

该系列为本人的学习笔记,主要由本人整理书写而成。部分内容来自教材、视频课程等,不能保证完全原创性。 萌新的学习笔记,写错了恳请斧正。 # 文件标识(文件名) 每个文件都有一个唯一的文件标识,也就是文件名 文件名包含 3 个部分:文件路径 + 文件名主干 + 文件后缀(可省略) 例如:C:\Windows\WindowsUpdate.log 我们常说的 “文件名” 是指文件名主干 # 文件分类 文件分为程序文件和数据文件 其中数据文件根据数据的组织形式分为文本文件和二进制文件 文本文件以 ASCII 字符的形式存储,二进制文件就是以二进制存储 # 流和标准流的基本概念 #...
1.5k 1 分钟

该系列为本人的学习笔记,主要由本人整理书写而成。部分内容来自教材、视频课程等,不能保证完全原创性。 萌新的学习笔记,写错了恳请斧正。 # 结构体(联合体)嵌套 结构体、联合体可以嵌套,也就是说结构体(联合体)的成员也可以是结构体(联合体) # 嵌套时内嵌结构体(联合体)不创建变量(匿名) 如果嵌套时内嵌结构体(联合体)不创建变量(匿名),内嵌结构体(联合体)的成员会被认为是外围结构体(联合体)的成员,如果外围结构体(联合体)也是匿名的,那么就递归应用此规则: #include <stdio.h>struct{ int...
3.7k 3 分钟

该系列为本人的学习笔记,主要由本人整理书写而成。部分内容来自教材、视频课程等,不能保证完全原创性。 萌新的学习笔记,写错了恳请斧正。 # 动态内存分配的意义 直接创建变量、数组等只能在栈区空间开辟固定大小的一段空间 而我们在实际使用时对空间的需求有时不会那么死板。比方说直接创建数组的话,其长度就固定了,不可调整 —— 如果我们需要数组的大小在程序运行时才会被确定就不行了 所以 C 语言中有动态内存分配的方法,使我们能够在需要时灵活的自己申请和释放空间 # malloc(memory allocation) malloc 是一个开辟动态内存的函数: #include...
2.5k 2 分钟

该系列为本人的学习笔记,主要由本人整理书写而成。部分内容来自教材、视频课程等,不能保证完全原创性。 萌新的学习笔记,写错了恳请斧正。 # 联合体(共用体) 联合体和结构体类似,也由一个或多个成员构成 但是联合体的特殊之处在于编译器只为成员中宽度最大的成员分配足够的内存空间 其余的所有成员都共用同一片空间,所以联合体也被称为共用体 这也就导致了如果给其中一个成员赋值,其他成员的值也会跟着变化 # 联合体的声明 联合体的声明和结构体类似,比方说: union U1{ char c; int n;};union U2{ char c; int...
4.1k 4 分钟

该系列为本人的学习笔记,主要由本人整理书写而成。部分内容来自教材、视频课程等,不能保证完全原创性。 萌新的学习笔记,写错了恳请斧正。 关于结构体的基本内容 (包括结构体的声明、创建、初始化、结构成员访问) 已经在笔记 #15 中讲述,不再赘述。 # 在定义结构体时起别名 在定义结构体时前面直接加 typedef 进行起别名的操作不会影响结构体的创建。 typedef struct a{ int a; float b; char c;} sta;这就是定义了一个结构体类型 struct a, 然后给它起别名为类型...
2.2k 2 分钟

该系列为本人的学习笔记,主要由本人整理书写而成。部分内容来自教材、视频课程等,不能保证完全原创性。 萌新的学习笔记,写错了恳请斧正。 在 stdlib.h 中还有几个有意思的字符串函数 它们的功能是将字符串开头的数字提取出来 下面我们具体看一看这几个函数吧 # atoi #include <stdlib.h>int atoi(const char* string);atoi,即 auto int。舍弃任何空白符,直至找到首个非空白符,然后接收尽可能多的字符以组成合法的整数(可以有负号)表示,并转换之为整数值。如果没有读取到数字,就返回...