- 博客(30)
- 收藏
- 关注
原创 【c/c++】内存对齐
首先我们要知道什么是内存对齐?答:内存对齐(MemoryAlignment)是计算机科学中的一个概念,指的是将数据存储在特定的内存地址上,以提高系统性能,是计算机存储数据的一种规则。内存对齐是由编译器、硬件、操作系统以及编程语言的特性共同实现的。编译器负责生成对齐的数据结构和代码,硬件提供对齐访问的性能优势,操作系统管理内存分配时考虑对齐要求,而编程语言提供控制对齐的工具和指令。这些共同作用确保程序在执行时具有高效的内存访问和最佳的性能。
2025-01-19 17:05:12
892
8
原创 告别繁琐编译!make和makefile的便捷之道
上一篇博客给大家分享了在Linux下编译源代码的两个工具,gcc和g++的使用。每次编译源代码,都要输入一串很长的指令,这个过程显然是十分复杂,且容易出错的,尤其是在一些大型的项目中,源代码可能有多个,此时编译起来就会更费劲。为了解决上面的问题,今天就给大家分享一个,Linux环境下的项目自动化构建工具——make/makefile。这部分知识理解起来比较抽象,多次尝试才能深刻理解,makefile还有很多特殊符号没有介绍,大家感兴趣自行搜索。
2025-01-18 20:29:48
691
1
原创 零基础上手gcc/g++:Linux编译轻松学
首先我们来学习一下gcc、g++二者之间的关系gcc英文全称为:GUN C Compiler,是GCC中的c编译器g++英文全称为:GUN C++ Compiler,是GCC中的c++编译器。gcc和g++ 两者都可以编译c和cpp文件,但存在差异。gcc在编译cpp时语法按照c来编译但默认不能链接到c++的库(gcc默认链接c库,g++默认链接c++库)。g++编译.c和.cpp文件都统一按cpp的语法规则来编译。所以一般编译c用gcc,编译c++用g++。
2025-01-16 19:59:00
1199
23
原创 vim编辑器
我们之前在学习C、C++等一些其他的编程语言的过程中,一定会使用一些编译软件,比如VSCode、VS2022等编译软件,这些软件都是在windows下的图形化编译软件,而Linux系统下不能直接使用这些软件,Linux下也有特定的编辑器和编译器,Vim(Vi IMproved)是 Linux 和 Unix 系统中最流行的文本编辑器之一。它是 Vi 编辑器的增强版,功能强大,灵活性高,广泛用于编写和编辑代码、文本文件等。本文将详细介绍 Vim 的基本概念、操作模式、常用命令。
2025-01-14 07:45:00
1612
7
原创 Linux用户管理:普通用户的创建、删除、查看
在我们学习和工作中,我们经常会有多个人使用一台服务器的需求,所以Linux下创建普通用户是我们必须要掌握的一项技能,在root用户下创建多个普通用户,这样我们就可以用这些普通用户去做不同的事情,所以学习如何创建并管理这些用户就显得尤为重要。这块知识总的来说比价简单,不同系统间可能又略微差别,大家可以多次尝试,一定可以熟练掌握。
2025-01-13 09:33:18
1176
22
原创 Linux权限管理(用户和权限之间的关系)
这时后我们就需要防止其他小组查看我们的代码,但又不能拒绝本组内的成员查看,然而文件拥有者又只能存在一个,所以这时我们就需要将小组成员都归为一个组,给这个小组的成员分配,他们需要的权限,而对于不属于这个小组的当然就归为其他人了。这时就造成了一个问题,当两个用户在同一路径下工作时,虽然我无法查看你的文件内容,但是我只要拥有这个共享目录的写权限,我就可以将你的文件删除。注:以上三种身份均都是相对于具体文件来说的,并不是绝对的。接下来的演示为了方便给大家展示,我们利用的是普通文件进行操作的,所以未使用到-R选项,
2025-01-12 13:37:09
982
43
原创 Linux常用指令-----下
在上一篇博客中,我給大家介绍了cat指令(将文件信息全部显示在屏幕),但是在我们做一个项目时,往往文件内容比较多,这时再使用cat指令就不太合适了。
2024-12-14 13:56:40
1041
60
原创 Linux常用指令-----中
Linux常用指令上篇–链接接下来我们介绍的指令是承接上篇,继续讲解的,希望大家可以先去看上篇。以上指令都可以相互之间配合操作做,我只是将,一些常见场景给大家展现了出来,只有多练习才能熟练运用,大家自己多尝试一下。希望这篇文章对你有所帮助。
2024-12-14 12:36:02
1161
22
原创 二分查找(带图详解)
在这篇博客中,我会给大家分享二分查找及其扩展。这是链接->Leetcode二分查找我们先以常规二分查找来引入。循环结束条件:左指针处在右指针的右边时(left>right)细节问题:1、在有的情况下我们使用mid=(left+right)/2来对指针取中时,如果left与right相加数值较大时(int类型存不下)可能会发生数据截断,这时我们往往采用mid=(right-left)/2+right,来代替上面的方式,至于为什么可以代替,大家举两个示例,计算一下就可以知道.
2024-12-08 22:24:11
1248
12
原创 Linux常用指令----上
在介绍Linux指令之前,大家要知道Linux中,”一切皆文件“这个核心概念。在接下来的介绍中我会适当引入,Wundows的界面操作,以方便大家理解。
2024-12-08 13:21:43
1461
70
原创 C语言文件操作(一篇全搞定)
在c/c++学习过程中,如果没有⽂件,我们写的程序的数据是存储在电脑的内存中,如果程序退出,内存回收,数据就丢失了,等再次运⾏程序,是看不到上次程序的数据的,如果要将数据进⾏持久化的保存,我们就要使用文件操作。前面都是概念的讲解,如果不想看,请直接跳入第三节,那个不可以跳。如果想收获更多,就不要跳过。磁盘(硬盘)上的⽂件是⽂件。但是在程序设计中,我们⼀般谈的⽂件有两种:程序⽂件、数据⽂件。
2024-12-08 13:20:25
1241
5
原创 leetcode刷题
这篇文章,主要分享是给大家分享几道利用递归解决的简单题目。如果你在备战蓝桥杯、ACM等,我想会对你有帮助。递归思想:把一个大型复杂问题层层转化为一个与原问题相似,但规模较小的子问题来求解;直到子问题不能再被拆分,递归就结束了。简单来说,递归就是将一个问题分解为多个逻辑相同的子问题来解决。由于身体不舒服,这块准备的好多知识,例题都没有介绍,我们会将他们都总结到下一篇,大家见谅!!
2024-12-04 23:31:07
738
6
原创 c++异常(看过之后随便把玩)
终止程序,如assert,缺陷:用户难以接受。如发生内存错误,除0错误时就会终止程序。返回错误码,缺陷:需要程序员自己去查找对应的错误。如系统的很多库的接口函数都是通过把错误码放到errno中,表示错误。下面这个就是错误码实际中C语言基本都是使用返回错误码的方式处理错误,部分情况下使用终止程序处理非常严重的错误。
2024-12-03 16:35:44
1222
28
原创 智能指针(带图讲解,一篇搞定)
智能指针是C++ 中的一种数据类型,用于自动管理动态分配的内存。内存泄漏指因为疏忽或错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并不是指内存在物理上的消失,而是应用程序分配某段内存后,因为设计错误,失去了对该段内存的控制,因而造成了内存的浪费。到这里我们就介绍完了,由于篇幅较长,又都是手敲,可能会有打字错误,请大家见谅!!
2024-12-03 16:34:05
1298
39
原创 c++哈希(开散列原理及实现)
在上篇文章中我们详细介绍了,哈希的思想及实现原理,也认识到了闭散列最大的缺陷就是空间利用率比较低,容易这也是哈希的缺陷。怎么来解决这个问题呢?下面我们就来学习一种新的方法————————开散列(链地址法)我们想要利用单链表形式来存储关键码,首先要定义链表结点。注:代码的注释可以帮助我们理解//链接结点//存储关键码:_kv(kv){}总的来说,这部分代码实现比较简单,主要时掌握哈希思想。
2024-11-30 18:03:23
1819
47
原创 c++哈希表(原理、实现、开放寻址法)适合新手
红黑树平衡树和哈希有不同的用途。红黑树、平衡树这类数据结构是有序的数据结构,它们可以高效地进行范围查询,比如查找一个区间内的值。在需要保持数据有序存储,并且频繁进行插入、删除和查找操作的场景下很有用,像数据库索引的实现就可能会用到。而哈希主要用于快速的数据查找。它通过一个哈希函数把数据映射到一个特定的位置,理想情况下,查找操作可以在常数时间复杂度内完成,也就是时间复杂度为O(1)。在只需要快速判断某个元素是否存在的场景下,哈希就非常合适。
2024-11-30 17:59:18
1079
16
原创 二叉搜索数(二叉排序树、二叉查找树)-----详解
二叉搜索树又称二叉排序树,它或者是一棵空树若它的左子树不为空,则左子树上所有节点的值都小于根节点的值若它的右子树不为空,则右子树上所有节点的值都大于根节点的值它的左右子树也分别为二叉搜索树在学习树型结构时,希望大家可以画图理解!!!!
2024-11-20 23:12:07
1884
55
原创 c++多态(深度刨析)
在开始学习多态之前,首先要掌握继承的概念、实现、原理,这篇文章可以帮助大家学习->继承详解。多态是在不同继承关系的类对象,去调用同一函数,产生了不同的行为。比如Student继承了Person。Person对象买票全价,Student对象买票半价。1. 必须通过基类的指针或者引用调用虚函数2. 被调用的函数必须是虚函数,且派生类必须对基类的虚函数进行重写。下面我们对上述条件进行分析在虚函数的后面写上 =0 ,则这个函数为纯虚函数。
2024-11-18 12:38:43
1099
50
原创 c++继承(万字详解、有图更直观易懂)
由于这块内容比较重要,知识点较多,所以在一些地方比较啰嗦,请大家见谅!继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继承是类设计层次的复用。例如。
2024-11-11 18:11:59
1850
56
原创 c++模板入门
template<class / typename T1,......,class / typename Tn> typename用来定义模板参数关键字,也可以使用class,在这里他们两个的作用并无区别,T1....Tn均为类型占位符。template<typename T>//简单函数模板类模板是一种用来生成类定义的模板,其中可以包含一个或多个类型参数。这些类型参数可以在定义类的时候替换为任意类型,从而使得我们能够创建适用于多种数据类型的通用类定义。
2024-11-03 22:10:59
886
36
原创 new/delete和malloc()/free()的区别及其使用
在c\c++程序的开发过程中,动态开辟和管理内存是我们无法避免 的操作,而在C语言和C++中都提供了,相应的操作方法,那么我们该如何选择呢?要如何选择我们首先要知道他们各自的”能力“大小// 动态申请一个int类型的空间// 动态申请一个int类型的空间并初始化为10// 动态申请10个int类型的空间如果你不了解或忘记new的基本操作,请用上述代码回顾一下调用operator new 函数(对于数组是operator。
2024-11-03 22:10:16
1193
19
原创 【C++系列】-----------内存管理
众所周知,c++没有提供(垃圾)回收机制,所以写C/C++程序常常会面临内存泄漏等问题,但是c++提供了对内存精细控制的方式,允许程序员以动态和手动的方式分配和释放内存。这种能力既带来强大的灵活性,也伴随着一定的挑战。下面我们一起看一下如何使用这些方法。free(p1);delete p2;return 0;
2024-10-30 13:11:40
1164
12
原创 c++------类和对象(下)包含了this指针、构造函数、析构函数、拷贝构造等
在本节中,我将给大家介绍我们在学习C++中经常要用到的,this指针、类的六个默认成员函数、运算符重载等相关知识.下面我会结合一个简单的类----日期类来介绍后面需要时会补充相应的成员函数class Datepublic:void Display()//打印类对象中的内容_day = day;// 年int _month;// 月int _day;// 日本次我们介绍了,this指针、构造函数、析构函数、拷贝构造、等一些与类紧密关联的知识。
2024-06-02 15:44:25
1513
96
原创 C++系列——————类和对象(上)
在学习C语言你可能听到过,C语言是面向过程的语言,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。C++是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成代码如下(示例)也可以将关键字struct替换为关键字class(可以将class看作struct的升级版)struct为定义类的关键字,stack为类的名字,{}中为类的主体,注意类定义结束时后面分号不能省略。类中的变量称为类的属性或成员变量;类中的函数称为类的方法或者成员函数。
2024-05-27 13:49:52
2489
49
原创 位操作----位运算符详解(按位与(&),按位或(|),按位异或(^),按位取反(~)以及左移(<<)右移(>>))
包含了常用的,位操作符
2024-05-19 16:27:13
1896
12
原创 C语言:strcpy函数和strncpy函数
在前面我们知道了字符串在C语言的地位是比较高的,c库提供的配套函数肯定少不了。今天我们介绍:strcpy函数和strncpy函数。函数的功能是很灵活的,希望大家多去尝试,在实践中发问题,一定要去模拟实现一下函数的功能,这种方法可以帮助我们理解的更透彻!!!!
2024-05-12 15:46:14
1842
19
原创 c语言------字符串详解(非常详细)
字符串是c语言中最有用、最重要的数据类型之一。我们在介绍字符串时或多或少的会涉及指针,这是不可避免的。(实际上字符串的大多数操作都是通过指针完成的)字符串是一个或多个要注意:双引号不是字符串的一部分。双引号仅告诉编译器它括起来的是字符串。在学习下面知识前我们要先知道,C语言没有专门用于存储字符串的变量类型,字符串都被存储在char类型的数组中。数组都由连续存储单元组成,字符串中的字符被存储在相邻的存储单元中,每个存储单元(一字节)存储一个字符。
2024-03-25 11:59:50
29531
12
原创 【C语言】------sizeof关键字用法详解
sizeof是C语言的一种单目操作符,如同C语言中其他的操作符++、–等,sizeof运算符是以字节为单位给出操作对象的存储大小。操作对象可以是表达式,类型名,结构体等,下面会一 一举例。明明结构体中定义的类型都相同,为什么结果有差异呢?哈哈哈这就不提到结构体对齐了,因为这不是我们这次的重点就先不介绍了,有兴趣大家可以搜一搜。四则偶分(var)或sizeof var(不带控号的在这里就不展示了,大家下去可以自己尝试一下)可以看出虽然两个指针指向的空间大小不同,但是指针所占空间大小并没有受影响。
2024-03-16 15:56:27
3096
12
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人