- 博客(34)
- 收藏
- 关注
原创 在码云(gitee)里面提交代码进行保存步骤(自留笔记)
9.出现此页面后在URL那里将我们第6步复制的路径进行粘贴,Directory是表示我将代码保存的路径,然后点击OK。12.在test-cpp文件夹中右击鼠标,点击显示更多项,在TortoiseGit中点击Add。2.此处我的仓库选择私有,也可以选择开源,选择开源时,注意把弹出来的选项全都点击。8.打开code文件夹,右击鼠标,点击显示更多项,点击Git Clone,5.保存后,我点击了test_c++,然后出现了此页面。关闭后,出现此页面才算成功,点击Commit。3.创建后,出现此页面,点击管理。
2024-01-20 20:06:26
672
原创 1.3数据结构之复杂度 力扣题目移除元素
移除元素首先我们可能会想到内存的释放,但是内存的释放是一次性的,不能断断续续,所以不能直接free掉。思路1:时间复杂度是:O(n) 空间复杂度是:O(n)思路2:时间复杂度:O(n) 空间复杂度:O(1)最后根据题目的要求我们采取思路2方法。
2023-11-06 20:56:22
121
2
原创 1.2 数据结构 算法空间复杂度
最好的情况:O(1) K=N*x(x>=1) k%N == 0 K是N的倍数时,不需要旋转。递归调用N次,使用N个栈帧,每个栈帧都使用了常数个空间,所以空间复杂度是O(N)最坏的情况:O(N^2) K%N==N-1时,N是数组长度。空间复杂度是对一个算法在运行过程中临时占用存储空间大小的量度。但其都是常数个,所以是O(1)有开辟额外空间:n+1;忽略掉1,所以是O(n)空间复杂度主要通过函数在运行时候显式申请的。怎么样时间复杂度和空间复杂度是O(N)呢?
2023-11-06 20:07:10
119
1
原创 1. 1数据结构 算法时间复杂度
用常数1取代运行时间中的所有加法常数。在修改后的运行次数函数中,只保留最高阶项。(取决定性的那一项)。如果最高阶项存在且系数不是1,则去除与这个项目相乘的常数(系数)。得到的结果就是大O阶。例如F(N)=4N,则可以将4去掉,最后O(N)。时间复杂度是保守的估算,在实际中一般情况关注的是算法的最坏运行情况,所以数组中搜索数据时间复杂度为O(N)。
2023-11-02 16:48:05
78
1
原创 18.C语言 数据在内存中的存储
第二个打印是0.000000,首先我们知道%f打印会自动保留小数点,9的2进制补码是0 00000000 000000000000000000001001,E全为0,所以真实值是1-127=-126,V=(-1) ^ 0 * 0.000000000000000000001001 *2^-126,所以打印0.000000。当 i 自减到 -1 时,机器是以补码形态存储,所以是1111 1111 1111 1111 1111 1111 1111 1111,是4294967295。则strlen从-1,-2…
2023-10-21 18:19:45
100
1
原创 17.C语言 内存函数
3.函数memcpy从source的位置开始向后复制num个字节的数据到destination指向的内存位置。1.和memcpy的差别就是memmove函数处理的源内存块和⽬标内存块是可以重叠的。1.如果source和destination有任何的重叠,复制的结果都是未定义的。1.功能:memset是⽤来设置内存的,将内存中的值以字节为单位设置成想要的内容。1.功能:⽐较从ptr1和ptr2指针指向的位置开始,向后的num个字节。3.memmove的模拟实现。2.memset的使用。
2023-10-08 21:40:24
92
1
原创 16.C语言 字符函数和字符串函数
1.⽐较str1和str2的前num个字符,如果相等就继续往后⽐较,最多⽐较num个字⺟,如果提前发现不⼀样,就提前结束,⼤的字符所在的字符串⼤于另外⼀个。目标中的终止空字符(\0)被源的第一个字符覆盖,并且在目标中由两者串联形成的新字符串的末尾包含一个空字符。指向 str1 中指定的整个字符序列在 str2 中首次出现的指针,如果序列在 str1 中不存在,则为 null 指针。2.返回指向 str2 中第一次出现的 str1 的指针,如果 str2 不是 str1 的一部分,则返回一个空指针。
2023-09-24 19:59:46
208
1
原创 15.4C语言指针 指针运算笔试题解析
2.要注意指针cpp的指向的改变会影响下一段代码的运行,还有cpp的指向在一个表达式中没有变。❗易忽略:逗号表达式,从左向右计算,整个表达式结果是最右的结果。❗下面代码在x86环境下 假设结构体的大小是20个字节。❗考查指针±整数运算。1.要遵循计算优先级。
2023-09-12 14:59:07
91
2
原创 15.3C语言指针 有关strlen的数组和指针笔试题解析
1.sizeof(数组名):整个数组大小。此时数组名表示整个数组。3.除了上面两种的情况,其他带有数组名的,数组名都表示首元素地址。2.&数组名:数组的地址。此时数组名表示整个数组。
2023-09-06 22:07:31
62
原创 15.2 C语言指针 有关sizeof 的数组和指针笔试题解析
❗注意:地址内存大小在x64环境下是8个字节,在x86环境下是4个字节。不同的环境对类型的大小无影响。
2023-09-04 10:15:42
91
原创 15.1C语言指针 sizeof和strlen的对比
sizeof 是操作符,用于计算变量所占内存空间大小,单位是字节,如果操作数是类型,则计算的是使用类型创建的变量所占空间大小。从strlen函数的参数str中这个地址开始向后统计\0之前字符串中字符个数,strlen函数会一直向后找\0字符,直到找到为止。❗sizeof 只关注占用内存空间的大小,不在乎内存中存放的数据。
2023-09-02 21:01:50
82
原创 14.C语言指针 回调函数、qsort使用、qsort函数模拟实现
回调函数:把调用的函数的地址以参数的形式传递过去,使用函数指针接收,函数指针指向什么函数就调用什么函数。例如要写一个计算器实现加法,减法,乘法,除法,退出计算器。
2023-08-16 22:05:14
126
原创 13.2C语言指针 函数指针变量、函数指针数组、转移表
🌏函数指针变量:⽤来存放函数地址的,未来通过地址能够调⽤函数的。🌏==函数名就是函数的地址,也可以通过&函数名作为函数地址==🌙函数指针变量的写法其实和数组指针⾮常类似。例如:数组指针:int (*p1)[10]函数指针:int (*p2)(int x,int y)🌈函数指针解析:int:p2指向函数的返回类型(*p2):函数指针变量名(int x,int y):p2指向函数的返回类型int (*)(int x,int y):p2函数指针变量的类型
2023-08-15 22:43:42
200
原创 13.1C语言指针 字符指针变量、数组指针变量、二维数组传参的本质
🌏数组指针变量:存放的应该是数组的地址,能够指向数组的指针变量。int (*p)[10]🌈解释:p先和*结合,说明p是⼀个指针变量变量,然后指着指向的是⼀个⼤⼩为10个整型的数组。所以p是⼀个指针,指向⼀个数组,叫数组指针。
2023-08-15 18:08:48
104
1
原创 12.2C语言指针 冒泡排序、二级指针、指针数组、指针数组模拟二维数组
🌏指针数组:存放指针的数组,每个元素都是用来存放指针,则每个元素又可以指向一块区域。
2023-08-15 10:35:28
521
1
原创 12.1C语言指针 数组名的理解、使用指针访问数组、一维数组传参本质
数组名就是数组⾸元素(第⼀个元素)的地址。但是,有两个例外数组名表示整个数组。🌙1.==sizeof(数组名)==,sizeof中单独放数组名,这⾥的数组名表⽰整个数组,计算的是整个数组的⼤⼩,单位是字节🌙2.==&数组名==,这⾥的数组名表⽰整个数组,取出的是整个数组的地址(整个数组的地址和数组⾸元素的地址是有区别的)
2023-08-14 22:51:54
144
原创 11.4C语言指针 指针初使用和传址调用,模拟库函数实现strlen
❗那是因为形参只是实参的拷贝,两者处在不同空间,就算传值到函数里面实现了值的交换,那也只是形参自己的交换,不影响实参,实参并没有真正交换。在11.2C语言指针章中学习指针变量类型意义后,我们尝试利用一下指针解决一些问题。🌏结论:传a和b的地址过去,实则Swap函数。❓那为什么不是直接将a值和b值传过去给实参呢。写一个函数,实现两个整型变量值交换。🌙先看例子,用循环方法打印数组。
2023-08-14 21:44:54
103
原创 11.3C语言指针 指针运算,野指针,assert断言
🌏1.指针初始化(1)知道指针指向哪⾥就直接赋值地址。(2)不知道指针应该指向哪⾥,可以给指针赋值NULL。🌏4.避免返回局部变量的地址🌏2.小心指针越界⼀个程序向内存申请了哪些空间,通过指针也就只能访问哪些空间。🌏3.指针变量不再使⽤时,及时置NULL。🌏 assert() ⽤于在运⾏时确保程序符合指定条件,如果不符合,就报错终⽌运⾏。这个宏常常被称为“断⾔”。🌏要运用头文件assert.h🌏如果程序⼜出现问题,可以移除这条 #define NDBUG 指令(或者把它注释掉
2023-08-14 21:42:36
95
原创 11.2C语言指针 指针变量和取地址符(&),const的使用
结论:const 如果放在 * 的左边,修饰的是指针指向的内容(n),保证指针指向的内容不能通过指针来改变。const如果放在 * 的右边,修饰的是指针变量本⾝(p),保证了指针变量的内容不能修改,但是指针指向的内容(n),可以通过指针改变。整型变量占了4个字节,现在我们只知道第一个字节的地址,但是我们可以顺着下去推出该变量其他字节的地址,然后访问到这些地址的数据。在内存上开辟空间,向内存申请4个字节的空间,存放数据1,且每个字节都有地址,地址如图所示。&a取出来的是a所占四个字节中地址较小的字节的地址。
2023-08-13 22:48:47
2075
2
原创 11.1C语言指针 看懂指针与内存和地址关系、内存如何编址
内存分为一个个内存单元,每个内存单元大小为1个字节(8个比特位),每个内存单元都有一个编号,CPU通过这些编号,找到一个内存空间,这个编号叫做地址,在C语言中,我们又把这个地址叫做。简单了解,例如32位机器有32根地址总线,每根线有两态,0和1(电脉冲有无),则一根线有两种含义,32根线,有2^32种含义,每一种含义代表一个地址。形象地来说,内存是一栋楼,一个内存单元是一户人家,指针是门牌号,CPU是我们,我们通过门牌号可以找到那户人家住的地方。
2023-08-13 12:28:04
467
1
原创 10.C语言 进制转换(思维导图版),操作符(巨细版)
优先级只能保证自减–在+前面执行,但是+的左操作数在右操作数之前还是之和,并不确定。规则:用逗号隔开的多个表达式,从左到右执行,整个表达式结果是最后一个表达式的结果。因为我们得到的是补码,所以提升要注意我们的是有符号还是符号进行区分补位。所以,即使操作符有优先性和结合性,但是表达式的运算顺序不能确定唯一路径。表达式求值前要就行类型转换,当表达式的值换到适当的类型,才开始计算。第一个在➕执行时,不知道第三个前置➕➕有没有执行,无法知道先后顺序。*和/的优先级一样,结合性都是从左到右,所以从左到右算。
2023-08-12 21:47:09
990
1
原创 9.C语言函数递归,求n的阶乘(n!)(快乐动画版)
函数递归一直不返回,函数对应的栈帧空间就⼀直占⽤,直到函数递归不再继续,开始回归,才逐层释放栈帧空间,所以如果采⽤函数递归的⽅式完成代码,递归层次太深,就会浪费太多的栈帧空间,也可能引起栈溢出(stack over flow)的问题。然后再不断返回自己的值,比如调用到n=0时,return 1,然后跳到n=1时,num=(返回的1)乘(n=1),num=1,再return num,因为n=1是最初的n,所以num是直接返回主函数的Ret(n)。如果满足第一个限制条件,代码是怎么运行的,输入0进行调试。
2023-08-07 16:29:40
996
1
原创 8. VS 如何调试(debug)与监视代码(快乐动图版)
相信我们写代码是为了写bug,那我们要如何修饰这些bug,让它变得更加坚不可摧呢?开玩笑哈,言归正传,我们确实不能保证写出来的所有代码都没有bug,当出现了bug,我们可以运用vs 调试和监视的功能,找出其中的逻辑和过程中出现的error,进行debug,让代码不再ugly。废话不多说,上干货。
2023-08-06 20:18:19
2274
原创 6.C语言函数
1.C语言中的函数是什么2.库函数3.自定义函数4.实参与形参4.1实参4.2形参4.3实参与形参关系5.return6.嵌套使用和链式访问6.1嵌套使用6.2链式访问7函数声明和定义7.1代码放在单个文件中7.2代码放在多个文件中7.3关键字static和extern
2023-08-01 18:17:40
339
2
原创 5.C语言数组(包含二分查找)
有时候我们要查找一个数,如果用循环从头查到尾,会耗掉一定的时间,所以,我们用二分查找,折掉一半去找数字,提高效率。变长数组的意思是:变量指定数组的大小,程序运行时,数组的大小指定元素个数,而不是数组大小是可变的。我们可以通过sizeof计算出元素个数,说明数组的元素个数不用固定定义,如在初始化的场景中。那为什么是相差4呢?看一维数组,有元素,推理,其实二维数组的元素就是一维数组,三维数组的元素就是二维数组。变长数组根本特征:数组长度只有运行时才确定,所以变长数组不能初始化。二维数组以上的数组是多维数组。
2023-07-28 17:16:09
180
1
原创 4.C语言分支和循环(下)猜数字
那为什么两次生成随机数序列一样呢:rand函数是对⼀个叫“种⼦”的基准值进⾏运算,然后⽣成的随机数。⽣成随机数的默认种⼦是1,所以每次运⾏程序产⽣的随机数序列是⼀样的。:返回一个伪随机数,该随机数范围:0~RAND_MAX(RAND_MAX大小依赖编译器实现,但大部分编译器上RAND_MAX是32767):程序中我们⼀般是使⽤程序运⾏的时间作为种⼦的,因为时间时刻在发⽣变化的。问题在这里:rand 函数生成的是伪随机数,伪随机数不是真正的随机数。给srand的种⼦是如果是随机的,rand就能⽣成随机数;
2023-07-26 22:54:10
226
2
原创 C语言分支循环题(求9的个数、分数求和、打印素数、九九乘法表、求最大值)
举例:假如我们想知道16是不是素数,就要举例数字看能不能整除,如果我们能找到 [2,sqrt[i]] 整除它,就不用再举例其他数字,优化代码。3.我们要找到有没有其他数字 j 整除 i ,所以要循环2~多少个数字呢?3.设第一个数字为最大值max,循环比较大小,若循环比较到有更大的值,则将值又赋给max,若没有则再循环直到跳出。因为偶数中只有2是素数,所以素数是奇素数和偶素数2组成。计算1/1-1/2+1/3-1/4+1/5 ……3.十位数字上的9用/10的商计算,然后让计算器count统计。
2023-07-25 18:20:25
205
原创 3.C语言掌握分支和循环(上)
for 循环想提前退出得使⽤ break ,⼀个 break 只能跳出⼀层 for 循环,如果3层循环嵌套就得使⽤3个 break 才能跳出循环,所以在这种情况下我们使⽤ goto 语句就会更加的快捷。for 和 while 在实现循环的过程中都有初始化、判断、调整这三个部分,但是 for 循环的三个部分⾮常集中,便于代码的维护,⽽如果代码较多的时候 while 循环的三个部分就⽐较分散,所以。• break 的作⽤是⽤于永久的终⽌循环,只要 break 被执⾏,直接就会跳出循环,继续往后执⾏。
2023-07-25 09:04:02
554
3
原创 C语言1 2节收藏题整理
arr是一个字符数组,不是有效字符串,程序将有效字符检测完之后,还会继续向后检测,直到遇到’\0’是才终止,所以获取的有效长度是随机值。strlen是用来获取字符串的有效长度(不包含’\0’的长度),遇到’\0’才停止获取长度。D.当全局变量和局部变量名字相同的情况,且都可以使用的时候,局部变量优先。C.%操作符计算的结果是两个操作数整除之后的。A.变量是用来描述生活中经常发生变化的值。D.负数求模的规则是,结果的正负号由。B.%操作符的操作数可以是整数,所以,只有7个有效字符。B.必须在库函数的后面。
2023-07-23 11:06:52
539
1
原创 2.C语言数据类型和变量
signed表示有符号,unsigned表示无符号[ ]表示里面内容可以省略代码演示:运行结果:3.数据类型的取值范围如果要查看当前系统上不同数据类型的极限值:limits.h ⽂件中说明了整型类型的取值范围float.h 这个头⽂件中说明浮点型类型的取值范围可以下载everything,搜索这些头文件。为了代码的可移植性,需要知道某种整数类型的极限值时,应该尽量使⽤这些常量。• SCHAR_MIN , SCHAR_MAX :signed char 的最⼩值和最⼤值。• SHRT
2023-07-22 12:30:59
495
6
原创 1.C语言常见概念(了解)
C语言有一批保留的名字的符号,称为保留字或关键字。值得注意的是,其都有特殊意义,保留给C语言用;程序员在创建标识符时不能和关键字重复;关键字也不能自己创建。C语言使用最多的32个关键字如下:1.autobreakcasecharconstcontinuedefaultdodoubleelseenumex2.floatforgotoifintlongregisterreturnshortsignedsizeof。
2023-07-21 21:45:39
697
原创 个人目前状况剖析
我是MONICA,目前就读广东双非本科大学,是网络空间安全专业的一名准大二生。自己最想摸索出自己的方向和方法并为之努力,并以csdn的博客坚持记录,共勉。
2023-07-20 18:59:33
111
3
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人