- 博客(36)
- 收藏
- 关注
原创 数据结构——栈和队列1
栈:一种特殊的线性表,只允许在固定的一端进行插入和删除数据操作。进行数据的插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据遵循先进后出的原则。栈的插入操作称为进栈/压栈/入栈,入数据在栈顶。栈的删除操作叫做出栈。出数据也在栈顶。栈底层结构选型:栈的实现一般可以使用数组或链表实现,相对而言数组的结构实现更优一些。因为数组在尾上插入数据的代价比较小,复杂度为O(1)。
2025-08-11 17:17:22
316
原创 数据结构——空间复杂度
空间复杂度也是一个数学表达式,是对一个算法在运行过程中因为算法的需要额外临时开辟的空间。空间复杂度不是程序占用了多少bytes的空间,因为常规情况每个对象大小差异不会很大,所以空间复杂度计算的规则基本与时间复杂度类似,也是用函数运行时所需要的栈空间(存储参数、局部变量)在编译期间已经确定好了,所以。
2025-07-29 13:53:49
649
原创 数据结构——时间复杂度
我们会发现有些算法的时间复杂度存在最好、最坏、平均的情况。最坏情况:最大的运行次数(上界)最好情况:最小的运行次数平均情况:期望的运行次数(下界)
2025-07-20 16:34:19
1051
1
原创 自定义类型:联合和枚举
像结构体一样,联合体也是有一个或者是多个成员构成的,这些成员可以是不同的类型但是编译器只是为最大的成员分配足够的内存空间。联合体的特点是所有的成员共用一块内存空间。给联合体其中的一个成员赋值的话,其他成员的值也是跟着变化的。输出的结果为什么是4?
2025-05-16 21:23:18
248
原创 自定义类型:结构体
位段的声明和结构体是类似的,有两个不同:1.位段的成员必须是 int 、unsigned int 或 signed int,在C99中位段成员的类型也可以是选择其他类型2.位段的成员名后边有一个冒号和一个数字struct A//_ a是变量名//变量名://1.字母、数字、下划线//2.不能是数字开头int _a : 2;// 2 比特位int _b : 5;int main()//理论上:2+5+10+30= 47bit/8 约等于 6 byteA就是一个位段类型。
2025-05-15 21:20:07
1022
原创 数据在内存中的存储
指数据的低位字节内容存放到内存的高地址处,而数据的高位字节内容,保存在内存的低地址处小端(存储)模式:指数据的低位字节内容存放到内存的低地址处,而数据的高位字节内容,保存到内存的高地址处我们常用的 x86 结构是 小端模式。
2025-05-10 21:08:55
1145
原创 字符串函数和内存函数
上面dest和sour是有重叠内存的,是不能实现自己给自己追加的情况,需要用到memmove来实现。memset函数是用来设置内存的,将内存中的值以字节为单位设置成想要的内容。结果:可以看见memcpy函数遇到 ' \0 ' 并没有停下来。1.memcpy 使用和模拟实现。2.memmove使用和模拟实现。3.memset函数的使用。4.memcmp函数的使用。
2025-05-10 11:29:58
329
原创 字符函数和字符串函数
这个头⽂件中说明的,C语⾔程序启动的时候就会使⽤⼀个全局的变量errno来记录程序的当前错误码,只不过程序启动 的时候errno是0,表⽰没有错误,当我们在使⽤标准库中的函数的时候发⽣了某种错误,就会将对应 的错误码,存放在errno中,⽽⼀个错误码的数字是整数很难理解是什么意思,所以每⼀个错误码都是 有对应的错误信息的。strlen 返回的值是 无符号类型的整数,无符号类型的整数的加减的结果也是无符号类型的整数,所以不会出现负数。在不同的系统和C语⾔标准库的实现中都规定了⼀些错误码,⼀般是放在。
2025-05-09 22:22:09
789
原创 指针(4)
回调函数就是通过函数指针调用的函数。将函数的指针(地址)作为一个参数传递给另一个函数,当这个指针被调用其所指向的函数时,被调用的函数就是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外一方调用的,用于对该事件或条件进行响应。
2025-04-27 16:15:21
222
原创 指针(3)
在内存中内容相同的常量字符串只会保存一份,ch3 和 ch4 是两个指针变量,但是里面的内容是一样的,所以指向的是同一块地址,所以指向的都是 a 的地址,所以 ch3 和 ch4 是相等的。int ( *p )[5] 的剖析:((*p))p是数组指针的变量名,代表是一个指针变量,指向的是一个数组,( [ 5 ] )里面有5个元素,( int )每个元素类型是整型。二维数组传参,形参的部分可以写成数组(便于理解,数组本质上是指针),也可以写成指针的形式,因为传参传的是地址,需要用指针来接收。
2025-04-20 22:22:25
485
原创 指针(2)
可以从上面的运行结果中就可以看见:确实如果是这样的话,嗯~那所有的情况都是数组名表示的是首元素的地址吗?运行结果为什么是 40 呢?如果是数组首元素地址的话,结果应该是 4 or 8为什么三个输出的结果都是一样的呢?上面的解释是否正确?
2025-04-20 21:04:06
783
原创 指针(1)
内存就好比一栋宿舍楼的一间一间的房间,而地址好比房间号,告诉你的朋友你的房间号才可以更快的找到你;在计算机中将内存划分为一个一个的内存单元,每个内存单元的大小是取1个字节。计算机中常见的单位:bit - 比特位byte - 字节KBMBGBTBPB生活中我们把门牌号叫做地址,在计算机中我们把内存单元的编号叫做地址,在C语言中给地址起了新的名字:指针。
2025-04-14 17:21:05
885
原创 操作符详解
/结构体的声明struct Stu//姓名int age;//年龄//爱好//学号//分号不能丢//结构体变量的定义和初始化struct Point //类型说明int x;int y;}P1;//声明类型的同时定义变量 P1//定义结构体变量 P2//初始化虽然有了操作符的优先级和结合性,但是写代码的时候最好不要写很复杂的表达式,容易出现问题,最好分几步来实现操作。
2025-04-07 22:05:50
821
原创 函数的介绍
了解了库函数,其实自定义函数更加重要。一般我们使用函式的时候,直接将函数写出来就使用了。例如:判断一年是否为闰年的代码:红色框里面是函数的定义,而绿色框里面是函数的调用。这样的顺序没有什么问题,当我们将定义放在调用之后就会出现问题。就会有这样的错误:这是因为C语言编译器对源代码进行编译时,从第一行往下扫描,但遇到第251行 is_leap_year调用时,在前面并没有发现 is_leap_year 函数的定义,就会报出上面的警告。将函数的定义写在函数调用的前面在函数调用之前写上函数的声明。
2025-03-19 22:14:33
850
原创 分支和循环(下)
time 函数会返回当前的⽇历时间,其实返回的是1970年1⽉1⽇0时0分0秒到现在程序运⾏时间之间的差值,单位是秒。返回的类型是time_t类型的,time_t 类型本质上其实就是32位或者64位的整型类型。程序中在调⽤ rand 函数之前先调⽤ srand 函数,通过 srand 函数的参数seed来设置rand函数⽣成随机数的时候的种⼦,只要种⼦在变化,每次⽣成的随机数序列也就变化起来了。其实 rand 函数生成的是伪随机数,伪随机数不是真正的随机数,是通过某种算法来产生的随机数。
2025-03-08 18:27:49
504
原创 分支和循环(上)
这种现象就能用“如果代码中有多个 if 和 else,值得注意的是, else 总是跟最接近的 if 匹配“这句话去解释,上面的代码中else与第一个if语句对齐,让我们认为else是和第一个if相匹配的。goto 语句如果使⽤的不当,就会导致在函数内部随意乱跳转,打乱程序的执⾏流程,所以我们的建议是能不⽤尽量不去使⽤;&& 就是与运算符,也是并且的意思, && 是⼀个双⽬操作符,使⽤的⽅式是 a&&b , && 两边的表达式都是真的时候,整个表达式才为真,只要有⼀个是假,则整个表达式为假。
2025-03-07 20:51:31
711
原创 C语言数据类型和变量
C语⾔提供了丰富的数据类型来描述⽣活中的各种数据。使⽤整型类型来描述整数,使⽤字符类型来描述字符,使⽤浮点型类型来描述⼩数。所谓“类型”,就是相似的数据所拥有的共同特征,编译器只有知道了数据的类型,才知道怎么操作数据。数组结构体-struct枚举-enum联合体-unionprintf() 的作⽤是将参数⽂本输出到屏幕。它名字⾥⾯的 f 代表 format (格式化),表⽰可以定制输出⽂本的格式。
2025-03-02 11:55:50
694
原创 C语言常见概念
为了不再重复实现常见的代码,让程序员提升开发效率,C语言标准规定了一组函数,这些函数再由不同的编译器厂商根据标准进行实现,提供给程序员使用。这些函数组成了一个函数库,被称为标准库,这些函数就被称为库函数。(库函数:标准库中的函数)
2025-02-26 19:33:11
887
原创 数据结构——算法复杂度
那么我们通过程序代码或者理论思想计算出程序的执⾏次数的函数式T(N),假设每句指令执⾏时间基本⼀样(实际中有差别,但是微乎其微),那么执⾏次数和运⾏时间就是等⽐正相关,这样也脱离了具体的编译运⾏环境。因为程序运⾏时间和编译环境和运⾏机器的配置都有关系,⽐如同⼀个算法程序,⽤⼀个⽼编译器进⾏编译和新编译器编译,在同样机器下运⾏时间不同。⿇烦的(不同的⼀句程序代码,编译出的指令条数都是不⼀样的),计算出精确的执⾏次数意义也不⼤,⼤O的渐进表⽰法在实际中⼀般情况关注的是算法的上界,也就是最坏运⾏情况。
2025-01-18 17:45:29
663
原创 小迪安全——第二天
在快代理上购买一个代理——>隧道代理——>在白名单中放入自己的IP,IP是会不断变化的,这就可以解决对方将自己的IP拉黑了,解决后续的访问问题,配置个代理就行了。数据库类型:Access,Mysql,Mssql,Oracle,db2,Sybase,Redis,MongoDB等。组成部分:开发语言,程序源码,中间件容器,数据库类型,服务器操作系统,第三方软件等。漏洞:大部分由源码,而源码是由开发语言开发的,所以漏洞是由代码写的有问题产生的。(可有可无,例如官方自带:office,而第三方软件:wps)
2024-07-12 17:31:54
543
原创 ctf.show——Web
1.web签到题一打开这样的页面右键查看页面源代码 base 64最终结果:ctfshow{5e40ea92-a6f5-4523-9a6f-7df69dc1a91
2024-03-29 18:43:32
194
1
原创 Web 1
题目说了去搜信息收集,第一次 做web题完全没思路,然后在哔哩哔哩上看见一道类似的题,就得到了flag,那么就写一写过程,再次梳理一下:flag{2fb9b155-fff3-4689-986d-9b5d0c3efd8f}
2024-03-29 18:26:10
238
3
原创 小迪安全——第1天
POC:全称 ' Proof of Concept ',中文 ' 概念验证' ,常指一段漏洞证明的代码。EXP:全称 ' Exploit ',中文 '利用',指利用系统漏洞进行攻击的动作。Payload:中文 ' 有效载荷 ',指成功exploit之后,真正在目标系统执行的代码或指令。Shellcode:简单翻译 ' shell代码 ',是Payload的一种,由于其建立正向/反向shell而得名。后门:是一个统称webshell:是以aspphpjsp或cgi。
2024-03-19 22:37:08
1226
原创 数组的介绍
从输出的结果来看,每⼀⾏内部的每个元素都是相邻的,地址之间相差4个字节,跨⾏位置处的两个元素(如:arr[0][4]和arr[1][0])之间也是差4个字节,所以⼆维数组中的每个元素都是连续存放的。前⾯学习的数组被称为⼀维数组,数组的元素都是内置类型的,如果我们把⼀维数组做为数组的元素,这时候就是⼆维数组,⼆维数组作为数组元素的数组被称为三维数组,⼆维数组以上的数组统称为多维数组。那数组如何初始化呢?学习了⼀维数组的基本语法,⼀维数组可以存放数据,存放数据的⽬的是对数据的操作,那我们如何使⽤⼀维数组呢?
2024-01-31 16:41:59
670
原创 C语言数据类型和变量
char有可能为有符号的signed char,也可能为unsigned char。[signed] char 有符号的。unsigned char 无符号的。int一定为signed。
2023-10-26 21:53:04
76
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人