![](https://img-blog.csdnimg.cn/20190918140012416.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
C
回顾一遍C语言
腿毛ger
无聊写写
展开
-
文本读取结束判定
1. 文本文件读取是否结束,判断返回值是否为 EOF ( fgetc ),或者 NULL ( fgets ) 例如: fgetc 判断是否为 EOF . fgets 判断返回值是否为 NULL .2. 二进制文件的读取结束判断,判断返回值是否小于实际要读的个数。 例如: fread判断返回值是否小于实际要读的个数...原创 2022-07-13 00:02:19 · 381 阅读 · 0 评论 -
strerror和perror
strerror(errno)将错误码对应的错误信息的字符串地址返回 需要引入头文件 #includeperror("errorKey") 如果发生错误,会打印出此格式错误信息 errorKey:错误信息不需要引入头文件原创 2022-07-12 23:58:58 · 121 阅读 · 0 评论 -
文件操作
每个被使用的文件都在内存中开辟了一个相应的文件信息区,用来存放文件的相关信息(如文件的名 字,文件状态及文件当前的位置等)。这些信息是保存在一个结构体变量中的。该结构体类型是有系统 声明的,取名FILE文件的打开和关闭文件在读写之前应该先打开文件,在使用结束之后应该关闭文件。 在编写程序的时候,在打开文件的同时,都会返回一个FILE*的指针变量指向该文件,也相当于建立了指 针和文件的关系。 ANSIC 规定使用fopen函数来打开文件,fclose来关闭文件文件的顺序读写...原创 2022-07-10 22:43:37 · 70 阅读 · 0 评论 -
sscanf/sprintf
sscanf/sprintf原创 2022-07-10 22:36:38 · 81 阅读 · 0 评论 -
柔性数组
C99 中,结构中的最后一个元素允许是未知大小的数组,这就叫做『柔性数组』成员。 柔性数组的特点:结构中的柔性数组成员前面必须至少一个其他成员。 sizeof 返回的这种结构大小不包括柔性数组的内存。 包含柔性数组成员的结构用malloc ()函数进行内存的动态分配,并且分配的内存应该大于结构的大 小,以适应柔性数组的预期大小。......原创 2022-07-10 00:55:28 · 97 阅读 · 0 评论 -
内存开辟
1. 栈区(stack):在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结 束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是 分配的内存容量有限。 栈区主要存放运行函数而分配的局部变量、函数参数、返回数据、返 回地址等。2. 堆区(heap):一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。分 配方式类似于链表。3. 数据段(静态区)(static)存放全局变量、静态数据。程序结束后由系统释放。4. 代码段:存放函数体(类成员函数和全局函原创 2022-07-10 00:09:21 · 297 阅读 · 0 评论 -
常见的动态内存错误
对NULL指针的解引用操作 对动态开辟空间的越界访问 对非动态开辟内存使用free释放 使用free释放一块动态开辟内存的一部分 对同一块动态内存多次释放动态开辟内存忘记释放(内存泄漏)原创 2022-07-07 22:18:24 · 60 阅读 · 0 评论 -
动态内存函数malloc free calloc realloc
void* malloc (size_t size);这个函数向内存申请一块连续可用的空间,并返回指向这块空间的指针。如果开辟成功,则返回一个指向开辟好空间的指针。如果开辟失败,则返回一个NULL指针,因此malloc的返回值一定要做检查。返回值的类型是 void* ,所以malloc函数并不知道开辟空间的类型,具体在使用的时候使用者自己 来决定。如果参数 size 为0,malloc的行为是标准是未定义的,取决于编译器。void free (void* ptr);free函数用来释放动态开辟的内存。如果参原创 2022-07-07 22:14:16 · 76 阅读 · 0 评论 -
关键字static
static是用来修饰变量和函数的1. 修饰局部变量-称为静态局部变量 static修饰局部变量改变了变量的生命周期 让静态局部变量出了作用域依然存在,到程序结束,生命周期才结束。2. 修饰全局变量-称为静态全局变量 一个全局变量被static修饰,使得这个全局变量只能在本源文件内使用,不能在其他源文件内使 用。3. 修饰函数-称为静态函数 一个函数被static修饰,使得这个函数只能在本源文件内使用,不能在其他源文件内使用。...原创 2022-07-06 22:00:23 · 65 阅读 · 0 评论 -
1关键字 typedef
typedef 顾名思义是类型定义,这里应该理解为类型重命名。原创 2022-07-06 21:58:30 · 69 阅读 · 0 评论 -
联合(共用体)
联合也是一种特殊的自定义类型特征是这些成员公用同一块空间(所以联合也叫共用体)。 利用联合体特性 判断大小端原创 2022-07-06 21:18:20 · 66 阅读 · 0 评论 -
枚举的定义
{}中的内容是枚举类型的可能取值,也叫 枚举常量 。 这些可能取值都是有值的,默认从0开始,一次递增1,当然在定义的时候也可以赋初值。 例如:1. 增加代码的可读性和可维护性2. 和#define定义的标识符比较枚举有类型检查,更加严谨。3. 防止了命名污染(封装)4. 便于调试5. 使用方便,一次可以定义多个常量枚举的使用...原创 2022-07-06 20:55:32 · 188 阅读 · 0 评论 -
结构体自引用和内存对齐
自引用方式 结构体的对齐规则 那在设计结构体的时候,我们既要满足对齐,又要节省空间,如何做到:让占用空间小的成员尽量集中在一起。 修改默认对齐数 之前我们见过了 #pragma 这个预处理指令,这里我们再次使用,可以改变我们的默认对齐数 计算结构体中某变量相对于首地址的偏移...原创 2022-07-05 22:12:29 · 57 阅读 · 0 评论 -
Size_t 是无符号的
Size_t 是无符号的原创 2022-07-02 23:19:56 · 75 阅读 · 0 评论 -
数组中关于sizeof()和strlen
数组中关于sizeof()和strlen原创 2022-06-22 21:50:45 · 69 阅读 · 0 评论 -
void* 指针
void* 类型指针 可以接受任意类型的地址void* 类型指针 不能直接进行解引用操作void* 类型指针 不能进行+-整数的操作操作前需要进行需求进行强制类型转换原创 2022-06-22 00:20:29 · 119 阅读 · 0 评论 -
指向函数数组指针的指针
指向函数数组指针的指针原创 2022-06-16 00:09:06 · 66 阅读 · 0 评论 -
回调函数
回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个 函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数 的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进 行响应...原创 2022-06-16 00:05:27 · 53 阅读 · 0 评论 -
函数指针的数组
【】的优先级大于*,parr先和【】结合,是一个数组,四个元素。四个元素 是 函数指针原创 2022-06-15 23:33:06 · 44 阅读 · 0 评论 -
函数指针
函数指针原创 2022-06-15 23:26:22 · 58 阅读 · 0 评论 -
数组指针和指针数组
int *p1[10]; 指针数组int (*p2)[10]; 数组指针int (*p)[10];解释:p先和*结合,说明p是一个指针变量,然后指着指向的是一个大小为10个整型的数组。所以p是一个 指针,指向一个数组,叫数组指针。//这里要注意:[]的优先级要高于*号的,所以必须加上()来保证p先和*结合。...原创 2022-06-14 21:29:19 · 54 阅读 · 0 评论 -
指针数组
指针数组原创 2022-06-14 21:23:29 · 60 阅读 · 0 评论 -
整数在计算机中的存储
原码、反码、补码 计算机中的整数有三种表示方法,即原码、反码和补码。 三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”,而数值位 负整数的三种表示方法各不相同。 原码 直接将二进制按照正负数的形式翻译成二进制就可以。 反码 将原码的符号位不变,其他位依次按位取反就可以得到了。 补码 反码 + 1就得到补码原创 2022-06-13 22:04:28 · 759 阅读 · 0 评论 -
const关键字,断言
const修饰指针变量的时候:1. const如果放在*的左边,修饰的是指针指向的内容,保证指针指向的内容不能通过指针来改 变。但是指针变量本身的内容可变。2. const如果放在*的右边,修饰的是指针变量本身,保证了指针变量的内容不能修改,但是指 针指向的内容,可以通过指针改变。......原创 2022-06-12 18:47:51 · 87 阅读 · 0 评论 -
VS工具调试使用技巧,debug和Relaease区别
VS工具调试使用技巧,debug和Relaease区别原创 2022-06-12 18:14:08 · 359 阅读 · 0 评论 -
函数调用的内存变化
函数调用的内存变化原创 2022-06-12 17:38:40 · 174 阅读 · 0 评论 -
整数和无符号数进行计算
整数和无符号数进行计算原创 2022-06-12 16:44:25 · 71 阅读 · 0 评论 -
2级指针和指针数组
指针变量也是变量,是变量就有地址,那指针变量的地址 就是 二级指针 。指针数组是数组。是存放指针的数组。原创 2022-06-12 16:12:02 · 66 阅读 · 0 评论 -
野指针理解
野指针就是指针指向的位置是不可知的(随机的、不正确的、没有明确限制的)野指针成因1. 指针未初始化2指针越界访问3 指针指向的空间释放 如何规避野指针1. 指针初始化2. 小心指针越界3. 指针指向空间释放即使置NULL4. 避免返回局部变量的地址5. 指针使用之前检查有效性...原创 2022-06-12 12:45:03 · 61 阅读 · 0 评论 -
指针相关概念
指针是什么? 1. 指针是内存中一个最小单元的编号,也就是地址2. 平时口语中说的指针,通常指的是指针变量,是用来存放内存地址的变量 总结:指针就是地址,口语中说的指针通常指的是指针变量。 指针变量我们可以通过&(取地址操作符)取出变量的内存真实地址,把地址可以存放到一个变量中,这个 变量就是指针变量指针类型 int类型指针,可操作四个字节 指针类型决定了 指针进行解引用操作的时候,能够访问空间的大小(能操作几个字节)比如: char* 的指针解引用就只能访问一个字节,而 int* 的指针的解引用就能访问原创 2022-06-12 12:37:29 · 58 阅读 · 0 评论 -
交换数字,异或求单,操作符相关
交换数字原创 2022-06-11 18:37:08 · 86 阅读 · 0 评论 -
数组相关内容
数组 定义 创建 初始化 访问 在内存中是连续存放的,数组作为函数参数,数组名在sizeof中计算的是整个数组的大小。&数组名代表的是 整个数组的地址原创 2022-06-11 17:44:20 · 74 阅读 · 0 评论 -
函数递归示例
递归示例原创 2022-06-11 10:41:02 · 55 阅读 · 0 评论 -
函数相关事项
C函数相关cplusplus.com - The C++ Resources Network实际参数(实参):形式参数(形参):函数的调用:传值调用:函数的形参和实参分别占有不同内存块,对形参的修改不会影响实参。传址调用:传址调用是把函数外部创建变量的内存地址传递给函数参数的一种调用函数的方式。 这种传参方式可以让函数和函数外边的变量建立起真正的联系,也就是函数内部可以直接操 作函数外部的变量 函数声明,定义......原创 2022-06-11 00:38:13 · 64 阅读 · 0 评论 -
左对齐,右对齐,随机数,goto,比较输出bool
左右对齐,随机数 最大值32767 goto, 输出bool原创 2022-06-10 21:12:10 · 101 阅读 · 0 评论 -
结构体示例
用来描述 复杂类型的对象原创 2022-06-09 20:52:27 · 79 阅读 · 0 评论 -
C 操作符
操作符原创 2022-06-08 21:05:37 · 66 阅读 · 0 评论 -
C 转义字符
转义字符原创 2022-06-08 20:20:51 · 75 阅读 · 0 评论 -
字符串相关
C 字符串原创 2022-06-08 20:00:15 · 63 阅读 · 0 评论 -
C常量,不能改变
不变的值,C语言中用常量的概念来表示原创 2022-06-08 00:02:45 · 360 阅读 · 0 评论