- 博客(94)
- 收藏
- 关注
原创 gdb的使用
在没有断点的情况下,直接跑完程序,如果有断点,会在运行到断点处停止,相当于VS调试下的F5。: 将main函数中定义的临时变量显示出来,相当于VS中的调试的自动窗口。:会展开部分代码,一般要看的改行代码,在所展示代码的中间位置。:直接回车会显示部分代码,可以持续按回车,直到代码显示完整。类似于在VS中有多个断点的情况下,按F5,跳转到下一个断点。类似与VS中的调试窗口,可以看见我们想看到的变量的变化。:一旦这个变量变化,就会通知,也算是断点的一种。在一个调试周期中,断点编号是线性递增的。
2024-11-05 17:06:54
1081
原创 gcc/g++使用
最后的答案是:系统把这些函数实现都被做到名为 libc.so.6 的库文件中去了,在没有特别指定时,gcc 会到系统默认的搜索路径“/usr/lib”下进行查找,也就是链接到 libc.so.6 库函数中去,这样就能实现函数“printf”了,而这也就是链接的作用。我们的C程序中,并没有定义“printf”的函数实现,且在预编译中包含的“stdio.h”中也只有该函数的声明,而没有定义函数的实现,那么,是在哪里实“printf”函数的呢?选项“-o”是指目标文件,“.i”文件为已经过预处理的C原始程序。
2024-10-29 18:46:36
808
原创 vim使用
vi/vim的区别简单点来说,它们都是多模式编辑器,不同的是vim是vi的升级版本,它不仅兼容vi的所有指令,而且还有一些新的特性在里面。例如语法加亮,可视化操作不仅可以在终端运行,也可以运行于x window、 mac os、windows。
2024-10-28 17:56:28
752
原创 Linux软件安装包管理器yum
"x86_64" 后缀表示64位系统的安装包, "i686" 后缀表示32位系统安装包. 选择包时要和系统匹配. "el7" 表示操作系统发行版的版本. "el7" 表示的是 centos7/redhat7. "el6" 表示 centos6/redhat6.yum安装软件只能一个装完了再装另一个. 正在yum安装一个软件的过程中, 如果再尝试用yum安装另外一个软件, yum会报错.最后一列, base 表示的是 "软件源" 的名称, 类似于 "小米应用商店", "华为应用商店" 这样的概念.
2024-10-27 18:19:40
477
原创 Liunx权限概念及权限管理
我们操作windows 不是直接操作windows内核,而是通过图形接口,点击,从而完成我们的操作(比如进入D盘的操作,我们通常是双击D盘盘符.或者运行起来一个应用程序)。但实际上你所创建的文件和目录,看到的权限往往不是上面的值,原因就是创建文件或者目录的时候还要受到umask的影响。如果目录没有-x权限,则无法对目录执行任何命令,甚至无法cd 进入目, 即使目录仍然有-r 读权限(这个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件)超级用户root的权限是022,普通用户的权限是002。
2024-10-27 18:19:18
1032
原创 初识Linux指令(三)
Tab]按键---具有『命令补全』和『档案补齐』的功能[Ctrl]-c按键---让当前的程序『停掉』[Ctrl]-d按键---通常代表着:『键盘输入结束(End Of File, EOF 戒 End OfInput)』的意思;另外,他也可以用来取代exit[Ctrl]-I:搜索历史命令[Alt+Enter]:进入/退出全屏。
2024-10-25 20:21:24
442
原创 初识Linux之指令(二)
head 与 tail 就像它的名字一样的浅显易懂,它是用来显示开头或结尾某个数量的文字区块,head 用来显示档案的 开头至标准输出中,而 tail 想当然尔就是看档案的结尾。:head 【参数】 【文件】:head是用来显示档案开头至标准输出中,默认head命令打印其相应文件的开头100行。
2024-10-15 21:56:11
710
原创 初始Linux之指令(一)
在 more 的时候,我们并没有办法向前面翻, 只能往后面看但若使用了 less 时,就可以使用 [pageup][pagedown] 等按键的功能来往前往后翻看文件,更容易用来查看一个文件的内容!:cp指令用于复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面指定的所有文件或目录复制到此目录中。2. 当第二个参数类型是文件时,mv命令完成文件重命名,此时,源文件只能有一个(也可以是源目录名),它将所给的源文件或目录重命名为给定的目标文件名。
2024-10-15 19:13:54
634
原创 模拟实现C++vector
vector的底层其实就是数据结构中的顺序表,顺序表的底层就是变长数组,是一段连续的物理空间在下面的实现中,重点实现的是其中的迭代器和插入删除,下标访问等功能,模拟实现模板类,有利于加深对于模板的认识,更方便使用。
2024-06-04 10:01:10
281
原创 C++之模板初阶
重载的函数仅仅是类型不同,代码复用率比较低,只要有新类型出现时,就需要用户自己增加对应的函数。如果类型不匹配,编译器会尝试进行隐式类型转换,如果无法转换成功编译器将会报错。3.只有一个,类型转换一下也可以用的,也可以匹配调用。使用模版,并没有让效率得到提高,只是让代码变得更简单,书写更加便利。1.在都有的情况下,优先匹配匹配普通函数+参数匹配。2.没有普通函数,优先匹配参数类型匹配的+函数模版。代码的可维护性比较低,一个出错可能所有的重载均出错。,对于字符类型也是如此。,对于模板函数的使用,
2024-05-03 22:45:37
514
原创 C/C++内存管理
目录一:C/C++内存分布二:C语言中动态内存管理方式:malloc/calloc/realloc/free三:C++内存管理方式3.1new/delete操作内置类型3.2new和delete操作自定义类型四:operator new与operator delete函数4.1operator new与operator delete函数五:new和delete的实现原理5.1内置类型5.2自定义类型六:定位new表达式(placement-new)三:C++内存管理方式C语言内存管理方式在C++中
2024-05-03 22:32:32
974
原创 日期类的实现,const成员
这两个运算符一般不需要重载,使用编译器生成的默认取地址的重载即可,只有特殊情况,才需。三:取地址及const取地址操作符重载。修饰类成员函数,实际修饰该成员函数。这两个默认成员函数一般不用重新定义。,编译器默认会生成。,表明在该成员函数中。
2024-04-28 22:03:22
589
原创 C++之运算符重载
如果写一个返回值为void的赋值重载函数也可以完成赋值,既然这样为什么返回值为什么是引用类型呢?注意:内置类型成员变量是直接赋值的,而自定义类型成员变量需要调用对应类的赋值运算符重载完成赋值。一个全局的赋值运算符重载,就和编译器在类中生成的默认赋值运算符重载冲突了,故赋值。3.用于内置类型的运算符,其含义不能改变,例如:内置的整型+,不 能改变其含义。3.虽然引用返回可以减少一次拷贝构造,但是出了函数作用域,返回对象还在才能用引用。返回值类型,函数名字以及参数列表,其返回值类型与参数列表与普通的函数类似。
2024-04-28 21:34:16
1078
原创 构造函数和析构函数
6.关于编译器生成的默认成员函数,很多童鞋会有疑惑:不实现构造函数的情况下,编译器会生成默认的构造函数。但是看起来默认构造函数又没什么用?d对象调用了编译器生成的默认构造函数,但是d对象_year/_month/_day,依旧是随机值。也就说在这里。
2024-04-06 21:24:43
871
1
原创 类的作用域及计算
3.做个比方,类实例化出对象就像现实中使用建筑设计图创建出房子,类就像设计图,只设计需要什么东西,实际上并没有实体的建筑存在,同样类也是一个设计,实例化出对象才能实际存储东西,占物理空间。缺陷:每个对象中的成员变量是不同的,但是调用的函数是相同的,如果按照这种此种方式存储,当一个类创建多个对象时,前面实例化时有讲到,对于函数变量的定义是开辟了空间给变量,如果空类的字节大小是0,那么下面的情况如何解释?如果嵌套了结构体的情况,嵌套的结构体对齐到自己的最大对齐数的整数倍处,结构体的整。
2024-04-05 18:16:36
1299
原创 C++之类
/类体:由成员函数和成员变量组成//注意后面的分号class是定义类的关键词,classname是类的名字,{}中为类的主体,注意类定义结束时后面的分号不能省略类体中内容被称为类的成员:类中的变量称为类的属性或者成员变量;类的函数称为类的方法或者成员函数3.1类的两种定义方式。
2024-04-04 21:27:21
1011
6
原创 引用,内联函数,auto函数,指针nullptr
在早期C++/C语言中auto的含义是:使用auto修饰变量,是具有自动存储器的局部变量,但是遗憾的是一直没有人使用它。auto不再是一个储存类型的指示符,而是作为一个新的类型指示符来指示编译器,auto声明的变量必须是有编译器在编译时推导而得。注意:使用auto定义的变量必须对其初始化,在编译阶段需要根据初始化表达式来推导auot实际类型。因此auto并非是一种“类型”的声明,而是一个类型声明时的占位符,编译器在编译时会将auto替换为变量实际的类型。
2024-04-01 21:05:52
1025
原创 函数重载和引用
分析为什么支持重载时,要有一个大前提,就是函数的定义要和声明分离,在不同的文件中,如果在同一个文件中,就可以直接拿到函数地址了,就不用通过函数名了。在讲解这个问题之前,我先说一下三个文件,编译链接的过程,详细过程,我在C语言专栏的编译链接里面有讲述,想了解更多的可以去看一下。在交换两个函数的时候,直接传值是不可以的,一般我们都要传地址,而在C++我们可以通过传别名来做。1.直接使用函数名找函数地址,不支持函数重载,如果函数名一样,不知道调用的函数是哪一个。,编译器不会为引用变量开辟内存空间,它和它的引用。
2024-03-29 20:45:57
748
原创 初步了解C++
C语言是结构化和模块化的语言,适合处理较小规模的程序。对于复杂的问题,规模较大的程序,需要高度的抽象和建模时,C语言则不合适。为了解决软件危机,20世纪80年代, 计算机界提出了OOP(object:面向对象思想,支持面向对象的程序设计语言应运而生。1982年,博士在C语言的基础上引入并扩充了面向对象的概念,发明了一种新的程序语言。为了表达该语言与C语言的渊源关系,命名为C++。因此:C++是基于C语言而产生的,它既可以进行C语言的过程化程序设计,又可以进行。
2024-03-29 15:56:54
1587
原创 排序大乱炖
直接插入排序,可以有很多种写法,写法也比较简单,在这里,我主要介绍一种和希尔排序十分相似的思想,方便后续讲解希尔排序在这里我们定义一个变量end,它用来记录下标,在这里我们认为[0,end]范围内的数组是有序的,然后将下标end+1所在的数组,与[0,end]范围内的数组比大小(所有排序讲解的均为升序),放在合适的位置。
2024-03-25 20:24:17
1034
原创 BC134 蛇形矩阵
首先,这道题我们要根据这个示例,找到蛇形矩阵是怎么移动的这是,我们可以标记一下每次移动到方向我们根据上图可以看出,蛇形矩阵一共有两种方向,橙色的是斜向右上角,蓝色的是斜向左上角,根据这个图的最后一个的点(16),我们可以先补出一个红色三角形,再根据这个三角形,可以补充为一个矩形。而这个三角形中,经过最后一个数据16的是第七行,所以循环时最后的条件是小于等于7(2*n-1)
2024-03-09 21:05:15
322
原创 预处理详解
C语言设置了一些预定义符号,可以直接使用,预定义符号也是在预处理期间处理的。__FILE__ //进行编译的源文件__LINE__ //文件当前的行号__DATE__ //文件被编译的日期__TIME__ //文件被编译的时间__STDC__ //如果编译器遵循ASIC C,其值为1,否则未定义//ASIC C gcc编译器是支持的,但是VS不支持#define reg register //为register这个关键字,创建一个更简短的名字//for循环判断部分什么都不写,表示恒成立,死循环。
2024-03-09 12:29:04
1271
原创 汉诺塔问题(C语言)
汉诺塔(Tower of Hanoi),又称河内塔,是一个源于印度古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。
2024-03-06 18:36:46
501
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人