- 博客(37)
- 收藏
- 关注
原创 C语言基础知识--文件的顺序读写与随机读写
/二进制写 ,写数据块到文件流。// 编译器的三个执行过程:.c/.h 预处理生成.i的文件、编译 .s 文件、汇编 生成 .obj 文件 链接生成可执行文件。// 5、 文件结束的判定: feof 函数(检查文件是否结束),ferror 函数: 检测文件是否结束,返回错误状态值。// // struct Person p = {"张三", 18, 90.5};// // SEEk_CUR:从当前位置开始偏移。// // SEEK_END:从文件末尾开始偏移。
2025-07-15 22:27:31
403
原创 C语言基础知识--文件读写(一)
/ // // 如果不在当前路径下要写绝对路径: /Users/l/Desktop/code/readtest.txt。// 数据文件: 文件的内容不一定都是程序,可能是程序运行时读取的数据,或者输出到文件中的内容。// // . 表示当前路径 .. 表示上一级路径: .\\..\\readtest.txt。// 1、流: 文件的输入输出,需要输出到不同的外部设备,抽象出流的概念。// ab 二进制追加文件:文件不存在则创建,存在则追加。// // 打开文件成功返回有效指针,如果失败null。
2025-07-13 17:44:22
268
原创 C语言基础知识--柔性数组
/ 包含柔性数组的结构,用malloc 进行内存的动态分配,并且的内存应该大于结构的大小,以适应柔性数组的预期大小。// 特点: 柔性数组前面至少有一个成员,sizeof 计算结构体大小,不包含柔性数组成员。// 未知大小,柔性数组成员 或者写成 int c[0];// if (newp == NULL) // 如果调整失败为空。// 存在于结构体中,最后一个成员,未知的成员数量。// 柔性数组的特点:柔性数组的成员数量是动态的.// // 调整大小。// // 访问。
2025-07-13 16:09:10
260
原创 C语言基础知识--常见的动态内存错误
/ 返回栈空间地址问题 : 栈空间地址是连续的,栈空间地址是固定的,栈空间地址是动态的。// 内存泄漏: 函数调用结束,栈空间被释放,但是动态开辟的空间没有被释放。// 4、对非动态开辟的内存使用free 释放。// 使用free 释放动态内存开辟的一部分。// 3、对动态开辟内存的空间进行越界访问。// 2、对已释放的内存进行访问。// 5、动态内存忘记释放。// 常见的动态内存错误。// // 判断。// // 释放。// // 使用。// 动态内存笔试题。
2025-07-13 15:22:50
350
原创 C语言基础知识--动态内存管理
/ 堆区:动态开辟的内存,malloc、free 、calloc、realloc。// 1、空间不够,在内存的堆区则申请新满足大小的空间,并把原数据拷贝到新空间,释放旧的空间,并返回新空间地址。// 3、malloc 函数返回的是 void * 类型, 需要进行强制转换。// 4、如果开辟成功, 返回的是一个指针, 否则返回 NULL。// 9、如果size 为0,标准是未定义的,一般返回NULL。// p 是要调整的内存地址 , size 是要调整的大小。// 6、动态内存的大小是可以调整的。
2025-07-12 23:26:28
375
原创 C语言基础知识--联合体
/ 初始化一个变量 充分利用了联合体取出1个字节的便捷性。// 当最大成员大小不是最大对齐数的整数倍时,会对齐到最大对齐数整数倍。// 联合体的空间大小是 联合体中成员变量中存储空间最大的那个变量。// 为最大的成员变量分配存储空间,所有的成员都用这个存储空间。// printf ("小端\n");// printf ("大端\n");// 联合体 :多个成员变量共用一个存储空间。// 联合体关键字:union 也叫共用体。// 联合体也存在内存对齐。// 联合体的大小计算。
2025-07-12 18:45:55
432
原创 C语言基础知识--枚举
/ 5、枚举有作用域规则,声明在函数内部的枚举常量,只在函数内部有效。// 枚举常量的值默认是从0 开始的,可以手动指定枚举常量的值。// 3、便于调试,预处理阶段会删除 #define 宏定义。// MALE=1, // 初始化值。// // 枚举常量,三种可能取值。// 1、增加代码的可读性和可维护性。// 4、一次可以定义多个枚举常量。// 枚举关键字 :enum。// 2、枚举有类型检查。// 利用枚举实现计算器。// 枚举 :枚举类型。
2025-07-12 17:41:36
338
原创 C语言基础知识--位段
/ 位指的是二进制位,大小不能超过自身类型的大小,例如int类型占32位,那么int类型的位段成员最多只能有32位。// 8、位段成员必须是 :int unsigned int ,signed int,c99 中可以是其他类型。// 10位,数字代表位数。// 跟结构相比,位段可以达到同样的效果,并且可以很好的节省空间,不能实现跨平台。// 位段中的成员在内存中从左向右分配,还是从右向左分配,标准未定义。// 位段的应用:不能位段的成员使用 & 运算符 和成员访问符号。// 位段的最大位的数目不能确定,
2025-07-12 16:08:24
251
原创 C语言基础知识--数据在内存中的存储
/ 1、整数在内存中的存储,存储时,整数的高位存储在低地址中,低位存储在高地址中。// 根据首字节进行判断,取最低位的地址进行char* 强制类型转换。// 大端字节序列:高位字节存放在低地址中,低位字节存放在高地址中。// 小端字节序列:低位字节存放在低地址中,高位字节存放在高地址中。// char 占一个字节,8位,首位是符号位,剩余7位存储数据。
2025-07-12 15:29:00
370
原创 C语言基础知识--结构体
/ 4、如果嵌套了结构体,则嵌套的结构体成员对齐到自己的成员的最大对齐数的整数倍处,结构体的整体大小就是所有最大对齐数(含嵌套结构体的对齐数)的整数倍。// 自定义顺序赋值。// 假设一个处理器总是从内存中读取8个字节,则地址必须是8的倍数,如果能保证将多有的double 类型的数据的地址都对齐成8的倍数,// 3、结构体的总大小为最大对齐数(结构体中每一个成员都有一个对齐数,所有对齐数中最大的)的整数倍( 默认对齐数gcc没有),// 结构体 :结构是一些值的集合,称为结构的成员变量,可以是不同类型。
2025-07-12 15:25:33
365
原创 C语言基础知识--大小端字节序
/ 把一个数据的高位字节序的内容存放到地址低端,低位字节序的内容存放到地址高端。// 把一个数据的低位字节序的内容存放到地址低端,高位字节序的内容存放到地址高端。// printf("小端\n");// printf("大端\n");// printf("小端\n");// printf("大端\n");// // 无符号数高位直接补0。// // -1 的二进制原码。// 大端字节序存储。// 小端字节序存储。
2025-07-01 00:02:54
320
原创 C语言基础知识--二分查找
/ int binary_search(int arr[], int k, int sz) // arr是一个指针变量 ,k是待查找的元素,sz是数组大小。// // 所以在函数内部计算一个函数参数部分的数组的元素个数是不正确的。// printf("找到了,下标为%d\n", rep);// // 数组传参是数组首元素地址,而不是整个数组。// printf("没找到\n");
2025-07-01 00:00:51
188
原创 C语言基础知识--库函数
/ perror 函数的使用: 先打印str 指向的字符串,在打印一个:在打印空格,然后再打印错误码对应的信息。// memmove : 把源字符串拷贝到目标字符串中,但源字符串和目标字符串重叠时,会出错 :内存移动。// // 使用char 的类型进行运算,原因是每次访问一个字节,相对粒度较细。// // void * 指针不能直接进行运算,所以需要赋予具体的类型。// 把str1 和 str2 放在一个变量中,方便操作。// // 不负责重叠位置的拷贝 ,使用后结果是未定义。
2025-06-30 23:58:59
381
原创 C语言基础知识-- 字符函数和字符串函数
rep = strtok(NULL, sep)) // 利用for 循环的特性,rep = strtok(email, sep) 只会执行一次。
2025-06-29 23:33:47
266
原创 C语言基础知识--深入理解指针
if (cmp ((char *)base + j * size, (char *)base + (j + 1) * size) > 0) // 如果返回值大于0,则交换位置 升序。// int (*cmp)(const void *, const void *)) // 函数指针比较函数 a< b 返回 -1 a>b 返回 1 a==b 返回 0。
2025-06-28 23:04:15
306
原创 C语言基础知识 --指针2
/ // *(arr + i) 解引用 (*(arr + i)[j]) ,arr[i] 表示的是第i 行的数组名,数组名又表示首元素的地址 arr[i] = &arr[i][0].// (*(void(*)())0)();// int (*) (int,int) //函数指针类型。
2025-06-26 23:55:07
312
原创 C语言基础知识--数组名和数组指针
/ p就是数组指针(可以理解为数组的指针,也就是首先是指针(*p),然后是数组类型[].),p 存放的是数组的地址,必须先加括号。// char *(*p) [5] =&ch //*p 说明p 是一个指针。// if (p == q) // 内容相同只保存一份,所以相等,// 常量字符串是放在只读数据区的。// 指针变量,指向同一个位置。// // int (*) [10] // 数组指针类型。// if (arr1 == arr2) // 比较首元素地值。
2025-06-25 22:30:12
209
原创 C语言基础知识--深入理解指针
/ // &arr+ 1 跳过整个数组,类型和下面两个不一样。// &arr 表示的是整个数组,取出的是整个数组的地址,数组的地址。// sizeof(arr) 表示整个数组,计算的是整个数组的大小。// 数组在内存中是连续存放的,数组名就是数组首元素的地址。// 数组是一块连续的空间,是可以存放一个或者多个的数组的。// 指针变量是一个变量,是一个可以存放地址的变量。// 数组传参本质传递的是数组首元素的地址,// p +i是下标为 i 的元素的地址。// 1、 数组在内存中是连续存放的。
2025-06-24 23:34:42
266
原创 C语言基础知识-- 野指针和指针使用(1)
/ size_t get_strlen (const char *str) // 函数参数 const char *str,用const 修饰,避免被修改。// 当实参传给形参时,形参是实参的临时拷贝,对形参的修改不会影响实参,分别有独立的地址。// #define NDEBUG //重新编译文件会禁用程序中所有的断言。// swap(&a,&b) 传址:想修改主调函数的参数,使用指针。// 通常用来判断指针的有效性。
2025-06-23 23:10:58
305
原创 C语言基础知识--const修饰指针
/ 放在* 的右边,限制的是指针变量本身,不能通过指针变量改变指针变量本身指向的内容,但是指针变量本身可以改变。// 放在* 的左边,限制的是指针指向的内容,不能通过 指针变量改变指针指向的内容,但是指针变量本身可以改变。// while (*start) // 当没有读取到字符串结束符时,继续循环。// 指针的类型决定了指针 + - 的步长 ,决定了指针解引用的权限。// 指针 - 指针的绝对值是之间的元素个数。// // 定义一个数组。
2025-06-22 22:22:27
368
原创 C语言基础知识篇--指针
/ 3、如何进行整数提升:有符号整数的提升是按照变量的数据类型的符号位来提升的,无符号整数提升,高位补0。// pa 的类型是 int * :* 表示pa 是指针变量,int 表示pa指向的变量a 的类型是int。// 通过pa :*pa 访问a ,解引用/间接访问a ,通过*pa 可以修改a 的值 *pa = 10;// 2、cpu中的alu 操作数的字节长度一般是int 的字节长度,同时也是cpu通用寄存器的长度。// 3、内存单元的编号 == 地址 == 指针。
2025-06-22 17:36:22
398
原创 c语言基础知识篇-- static与extern
摘要:静态变量(static)与全局变量(extern)的关键区别在于存储位置和作用域。static变量在编译时分配地址,存储在静态区而非栈区,生命周期覆盖整个程序;修饰全局变量或函数时,会限制其仅能在当前文件使用。而extern则用于声明外部链接的全局变量和函数,允许跨文件访问。全局变量默认具有外部链接属性,static会修改这一属性,将其作用域限制在当前文件。这些修饰符本质上是改变变量和函数的存储类型和链接属性。
2025-06-22 16:07:06
87
原创 C语言基础知识篇-- 操作符
10进制转换2进制: 13 13/2 = 6 13%2 = 1 6/2 = 3 6%2 = 0 3/2 = 1 3%2 = 1 1/2 = 0 1%2 = 1 0/2 = 0 1101。2进制转换16进制:1101 从右边向左,每四个位一组,转换成16进制 :1101 = 1x2^3 + 1x2^2 + 0x2^1 + 1x2^0 = 13 >> D。赋值操作符:= += -= *= /= %= <<= >>= &= |= ^=将数组A中的内容和数组B中的内容进行交换。
2025-06-22 16:04:00
399
原创 c语言基础知识篇--函数
在调用之前就把call 的下一条指令记住,函数调用结束之后,再回到这个指令,指针往回走的时候就会找到这个指令。ebp 和 esp 这两个寄存器中存放的是地址,用来维护函数的栈帧,调用函数时就维护那个栈帧。函数传参,还没有开始调用时,已经从右边向左进行压栈 通过add 的指针偏移量找到。返回是通过寄存器的方式返回的,函数调用结束之后 ebp 和 esp 会销毁掉。局部变量是随机值,是放进去的,初始化后会覆盖随机值。是创建了main 函数的栈帧,在里面分配空间。值上是一样的,空间上是独立的。
2025-06-22 16:01:57
132
原创 c 语言基础知识--循环与分支
/ 计算1/1-1/2+1/3-1/4+1/5 ……// if (5 == a) // 建议把 常量放在左边。// printf("余数为0\n");// printf("余数为1\n");// printf("余数为2\n");// printf("输入错误\n");// printf("工作日\n");// printf("休息日\n");
2025-06-19 14:01:42
288
原创 c语言基础知识篇-----函数
/ 作用域的定义是指在一段程序代码中,⼀段程序代码中所⽤到的名字并不总是有效(可⽤)的,⽽限定这个名字的可⽤性的代码范围就是这个名字的作⽤域。// 如果函数定义了返回类型,则必须返回一个值,如果没有返回,否则编译器会随机返回一个值。// 二进制>>>>>助记符(汇编代码)>>>>>b语言>>>>>c语言。// // 给函数传递数组和数组大小,k表示需要交换的值。
2025-06-19 10:19:00
235
原创 c语言基础知识-一维数组篇
/ 计算数组 int sz = sizeof(arr) / sizeof(arr[0]) 元素个数与。// 当对数组进行初始化时,数组的大小可以省略,编译器会根据初始化的内容进行数组长度的计算。// 数组是有下标的,从0开始的,最后一个下标就是n-1。// sizeof (arr) 计算的是数组总的大小。// 数组元素是连续存储的(内存空间)// 通过循环进行数组下标访问数组元素。// 数组名是数组首元素的地址。// 数组元素是按索引访问的。
2025-06-16 23:22:16
205
原创 c语言基础知识-变量的创建
/ 全局变量 // 函数外定义的变量,函数调用结束后,变量不会销毁 ,在project中可以使用。// 局部变量未初始化之前是一个随机值。// 局部变量 // 函数内定义的变量,函数调用结束后,变量就会销毁。// 若一个程序中同时存在同名变量,则会使用局部变量。// 栈内存 :函数调用时,分配内存。// 静态内存 :全局变量 静态变量。// 堆内存 :动态内存分配。
2025-06-16 16:45:26
184
原创 c语言基础知识2
3、转向语句:break、goto continue、return。2、循环执行语句 do while 、while 、for。// sizeof(s= a+1) 表达式不会进行计算。// int == signed int 默认。自定义类型:数组、结构体、联合体、枚举。内置类型:字符、符点、整形、希尔类型。
2025-06-16 16:35:22
209
原创 C语言入门基础知识篇
包含:预处理指令、main函数、变量声明或者定义 :int a \extern int a 、注释部分 :单行注释等。a-z ,A-Z,0-9 不能以数字开头,可以以下划线开头,区分大小写 ,不能使用:!如果没有结束符,后面打印则会产生随机值。
2025-06-16 16:26:39
148
原创 API测试方案
需要从上一个接口的响应数据中提取某个值,作为下一个接口的请求参数,解决方案是可以通过后置处理器(比如正则表达式提取器、JSON提取器、XPath提取器、CSS/JQuery提取器)从上一个接口的响应中提取数据,定义成变量,再在下一个接口的请求中引用这个变量来解决数据的依赖。默认情况下,测试计划下的“独立运行每个线程组”选项是没有勾选的,表示测试计划下的所有线程组是同时执行的(谁先抢到资源就先执行谁),如果勾选了这个选项,就表示按测试计划下线程组的添加顺序依次执行。接口测试是测试系统组件间接口的一种测试。
2022-12-12 14:11:15
3596
原创 性能测试基础
目录 一、性能测试概述 二、性能测试相关术语 三、性能测试类型 四、性能测试工具 五、性能监控工具 六、制定性能测试方案 七、项目实战 八、MySQL性能调优的常用方法
2022-12-08 11:51:12
178
原创 xx接口测试方案模板
1)越底层发现bug,修复成本越低(越早发现bug,修复成本越低)。2)前后端按约定的接口开发,接口测好了,前端随便改,后端不用变。3)如今的系统复杂度不断上升,传统的测试方法成本急剧增加且测试效率大幅下降,接口测试可以提供 这种情况下的解决方案。4)接口测试相对容易实现自动化持续集成,且相对UI自动化也比较稳定,可以减少人工回归测试的人力和时间成本,缩短测试周期,支持后端快速发版。5)现在很多系统前后端架构是分离的,从安全层面来说:6)只依赖前端进行限制已经完全不能满足系统的安全要求(绕过前端实在太容易)
2022-12-08 11:32:59
975
原创 性能测试执行方案
XX项目性能测试方案1.测试背景项目的背景说明,为什么要做性能测试?举例:宏天EIP7系统主要是帮助组织解决复杂审批业务,有效梳理及简化组织的业务流程,有效提升组织的运作效率,包括流程管理,监控,优化的中间件平台。为了保障xx版本上线后不出现性能问题,所以开展这次性能测试。2.测试目的、目标本次测试要达到什么目的?明确此次性能测试的目的、目标3.明确业务需求规则、业务模型明确测试对象、业务梳理在性能测试中,不是所有的流程都需要做性能测试,要梳理
2022-12-07 21:54:24
717
原创 接口测试执行方案
接口测试方案1.接口测试简介1.接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻辑依赖关系等。2.为什么要做接口测试1).越底层发现bug,修复成本越低(越早发现bug,修复成本越低)。2).前后端按约定的接口开发,接口测好了,前端随便改,后端不用变。3).如今的系统复杂度不断上升,传统的测试方法成本急剧增加且测试效率大幅下降
2022-12-07 21:49:25
318
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅