自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(52)
  • 收藏
  • 关注

原创 C++:命名空间

定义的语法格式为:namespace 命名空间名​ 变量/函数/类。

2025-03-13 11:17:20 323

原创 C++:面向对象之多态(运算符重载)

​ 引⼊运算符重载是为了实现类的静态多态性。

2025-03-10 19:30:47 846

原创 C++:面向对象编程(续)

​ c++中,有⼀种特殊的成员函数,它的名字和类名相同,没有返回值,⽽在创建对象时会⾃动执⾏,这种特殊的成员函数就是构造函数。类中的数据成员的初始化往往通过构造函数来实现。

2025-03-07 11:22:33 935

原创 c++:面向对象编程简介

​ 在C++中,⽤户⾃定义数据类型的⽅式主要有两种:结构体类型和类类型。其中类类型是根据结构体类型演化过来的⼀种类型,可以说是结构体的增强版。类是⽤户⾃⼰指定的类型。如果程序中要⽤到类类型,必须⾃⼰根据需要进⾏声明,或者使⽤别⼈已设计好的类。C++标准本身并不提供现成的类的名称、结构和内容。在C++中声明⼀个类类型和声明⼀个结构体类型是相似的。通过上述对⽐,我们可以发现:​ 1.创建结构体⽤struct, 创建类类型⽤class关键字。

2025-03-06 17:40:10 732

原创 C与C++的区别

在编程的浩瀚宇宙中,C 和 C++ 堪称两颗耀眼的巨星,各自绽放出独一无二的光彩。C 语言作为经典的结构化编程语言,多年来在系统开发、嵌入式编程等领域始终占据着举足轻重的地位。而 C++ 作为 C 语言的进阶与拓展,不但完美继承了 C 语言的高效与灵活,还引入了面向对象编程、泛型编程等强大特性,极大地拓宽了编程的边界。今天,就让我们一同深入探究 C++ 与 C 语言的区别,领略 C++ 的独特魅力。

2025-03-03 15:22:06 2276 1

原创 多线程-同步

​ 条件的检测是在互斥锁的保护下进行的。如果另一个线程改变了条件,它发信号给关联的条件变量,唤醒一个或多个等待它的线程,线程重新获得互斥锁,需要重新评价条件。​ 由于条件变量是用来等待一个条件发生的,在条件未发生之前,会阻塞使用该条件变量的线程,也就是说条件变量允许线程以无竞争的方式等待条件的发生。​ 前面所讲到的信号量也就是操作系统所用到的PV 原子操作,它广泛用于进程或线程之间的同步和互斥,信号量本身是一个非负整数计数器,而PV 原子操作就是对这个整数计数器信号量(sem)的操作。

2025-02-10 09:02:32 544

原创 多线程-互斥

​ 互斥锁是用一种简单的加锁方法来控制对共享资源的访问,互斥锁有两种状态,上锁和解锁,可以把互斥锁看作成某种意义上的全局变量。​ 读写锁与互斥量类似可以实现线程对临界资源的互斥访问,但和互斥量不同的是:互斥量对临界资源的访问是独占的方式;​ 静态:pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;​ 在访问共享资源前,首先申请互斥锁,如果互斥锁处于开锁状态,则就可以申请到,并立即占有这个该互斥锁。​ 具体实现: pthread_mutex_lock 函数。

2025-02-10 08:39:36 970

原创 多线程之间的操作

​ 线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源(栈),但它可与同属一个进程的其它线程共享进程所拥有的全部资源。同一进程中的多个线程之间可以并发执行。每一个程序都至少有一个线程,若程序只有一个线程,那就是程序本身。在单个程序中同时运行多个线程完成不同的工作,称为多线程程序设计。

2025-02-08 09:18:04 857

原创 Linux进程间通讯-信号

进程收到信号后,会检查对该信号的处理机制,通常是终止进程或者忽略该信号,如果该信号指定了一个处理函数(捕捉),则会中断当前正在执行的任务,转而去执行该信号的处理函数,返回后,再次继续执行被中断的任务。​ 进程告诉操作系统暂时不接受某些信号,如果在屏蔽期间向进程发送了屏蔽信号,该信号将不被捕捉,一段时间后,如果进程解除信号屏蔽,该信号就被捕捉到。​ 产生信号,发送信号有多种方式,一个进程可以向另一个进程发送一个特定信号,内核也可以向用户进程发送信号,进程还可以向自己发送一个信号。8.可靠与不可靠信号。

2025-02-08 09:15:38 1222

原创 Linux进程间通讯

进程间通讯(IPC)是指在两个或多个不同的进程间传递或者交换信息。进程是一个独立的资源管理单元,不同的进程之间资源是独立的,不能在一个进程中直接访问另一个进程的资源,但是进程间也不是孤立的,因此,进程间也需要一些信息的交互和状态传递,所以呢也就需要进程间数据传递,同步和异步的机制。

2025-02-08 09:01:15 681

原创 Linux进程与进程控制

​ 进程的概念首先是在20世纪60年代初期有 MIT 的Multics 分时系统和IBM的 TSS/360系统引入的,在40多年的发展中,人们对进程有过各种各样的定义,列举较为著名的几种。​ 进程是一个独立的可调度的活动(Cohen, Jofferson);​ 进程是一个抽象的实体,当它执行某个任务时,要分配和释放各种资源。​ 进程是可以并行执行的计算单位(Madnick,Donovan)本质:进程是程序的一次执行的过程,进程是程序执行和资源管理的最小单元。

2025-02-07 11:16:56 1164

原创 Linux文件目录基本操作

什么是目录?在linux操作系统中其实目录也是一种文件,相对于普通文件,它的存储内容不同,它的存储内容主要是当前目录下的文件以及子目录文件信息。目录就像是一颗大树,从根处分开很多分支,Linux 系统中所有文件都存在根目录下,根目录以 “/” 表示。而关于目录的操作主要有打开,遍历和关闭等。

2025-02-07 10:41:20 902

原创 文件操作:系统IO

简单的说,文件就是存储在硬件磁盘上的数据集合。

2025-01-17 20:24:56 589

原创 C语言:数据结构(双向链表和循环双线链表)

对链表而言,双向均可遍历是最方便的,另外首尾相连循环遍历也可大大增加链表操作的便捷性。因此,双向循环链表,是在实际运用中是最常见的链表形态。

2025-01-13 14:28:39 262

原创 C语言:数据结构(单链表)

顺序表:顺序存储的线性表。链式表:链式存储的线性表,简称链表。既然顺序存储中的数据因为挤在一起而导致需要成片移动,那很容易想到的解决方案是将数据离散地存储在不同内存块中,然后在用来指针将它们串起来。这种朴素的思路所形成的链式线性表,就是所谓的链表。

2024-12-24 11:42:59 1293

原创 C语言:数据结构(线性表和顺序表)

顺序存储中,由于逻辑关系是用物理位置来表达的,因此从上述示例代码可以很清楚看到,增删数据都非常困难,需要成片地移动数据。顺序表对数据节点的增删操作是很不友好的。优点不需要多余的信息来记录数据间的关系,存储密度高所有数据顺序存储在一片连续的内存中,支持立即访问任意一个随机数据,比如上述顺序表中第i个节点是 s->data[i]缺点插入、删除时需要保持数据的物理位置反映其逻辑关系,一般需要成片移动数据当数据节点数量较多时,需要一整片较大的连续内存空间。

2024-12-24 11:40:43 1125

原创 练习题:指针

利用指针变量将一个数组中的数据反向输出。

2024-12-23 16:57:08 945

原创 C语言:预处理

预处理就是在源文件(如.c文件)编译之前,所进行的一部分预备操作,这部分操作是由预处理程序自动完成;当源文件在编译时,编译器会自动调用预处理程序来完成预处理执行的解析,预处理执行解析完成才能进入下一步的编译过程。gcc 源文件 -E -o 程序名[.后缀]不带参数的宏定义# define 宏名 常量数据预处理:此时的预处理只做数据替换,不做类型检查注意:我们定义的宏是不会占用内存空间,还没有进入到编译环节,更不要说运行了,在编译前已经将宏名替换成了常量数据宏展开;

2024-12-19 17:22:20 713

原创 C语言:文件IO

什么是文件文件是保存在外存储器(一般代指磁盘,U盘,移动硬盘等)的数据的集合文件操作体现在哪几个方面数据的读取和写入可被视为针对文件进行输入(Input)和输出(Output)操作,此时数据像水流一样从外存储器去流向内存,或者从内存流向外存储器,所以系统形象的成文件操作为。C语言程序对文件的操作采用“文件缓冲机制”。就是说在程序对文件的数据读写并不是直接操作文件中的数据,而是系统会为文件在内存中创建“文件缓冲区”,程序对文件的 操作,其实在缓冲区进行的。

2024-12-17 17:37:49 1003

原创 C语言:构造类型(补充)

如果定义不相干的常量,使用宏定义;如果需要定义一组相关的常量,使用枚举。定义:我们一般情况下,定义常量使用宏定义(#define 宏名称值),宏定义非常适合没有关联关系的常量;,那么使用宏定义,就不是很清晰明了,这个时候就需要用到枚举。说明:枚举类型定义了一组常量,在开发应用中可以直接使用这些常量。(常用)枚举类型也可以是类似于结构体一样定义变量等操作。(不常用);我们可以在定义时指定它的默认值,如果个别没有赋值,可以根据赋值依次+1计算推导。

2024-12-17 10:57:16 515

原创 练习题:函数

编写一个函数,通过输入球的半径,返回球的体积3.1415926。

2024-12-17 10:53:55 423

原创 练习题:二维数组

一个二维数组赋了初值,用户输入一个数,在该二维数组中查找。找到则返回行列位置,没找到则提示。

2024-12-17 10:45:03 339

原创 练习题:一维数组

键盘录入一组数列,利用冒泡排序将数据由大到小排序。

2024-12-17 10:38:54 301

原创 练习题:循环结构

练习题。

2024-12-17 09:23:28 350

原创 练习题:分支结构

输入你的身高和体重,测试你的健康状况计算bmi的值, bmi = (体重(kg)/⾝⾼(m)的平⽅) 如果bmi ⼩于18.5,则显⽰“偏瘦,注意加强营养” 如果bmi 在18.5和23.9之间,则显⽰“体重指数良好,注意保持” 如果bmi值⼤于23.9 ,则显⽰“你有点偏胖,注意锻炼”

2024-12-17 09:09:28 230

原创 C语言:构造类型

定义:自定义数据类型的一种,关键字struct,结构体类型的变量可以存储多个不同数据类型的数据struct 结构体名数据类型1 成员名称1;// 结构体中的变量叫做成员数据类型2 成员名称;...注意:结构体中定义的变量,我们称之为成员变量格式说明结构体名:合法的标识符,建议单词的手写字母大写(所谓的结构体,要自定义类型的礼类型的)数据类型:C语言支持的所有类型(包括函数,函数在这里用函数表示)成员名称:合法的标识符,就是变量的命名标准。

2024-12-16 19:38:11 1092

原创 C语言:指针(第五天)

定义:指向一块未知区域(已经销毁或者访问受限的内存区域外的已存在或不存在的内存区域)的指针,被称作野指针。野指针是危险的。危害:① 引用也野指针,相当于访问了非法的内存,常常会导致段错误(segmentation fault),也有可能编译运行不报错。② 引用野指针,可能破坏系统的关键数据,导致系统崩溃等严重后果野指针产生的场景:变量未初始化,通过指针访问该变量指针变量未初始化int * p;指针指向的内存空间被(free)回收了指针函数中直接返回了局部变量的地址如何避免野指针?

2024-12-16 19:37:32 1065

原创 C语言:指针(第四天)

定义:main函数有多种定义格式,main函数也是函数,函数相关的结论对main函数也有效(也可以定义main函数的函数指针)说明:argc,argv是形参,他们俩可以修改main函数的扩展写法有些编译器不支持,编译报警告main函数是系统通过函数指针的回调调用的。

2024-12-16 19:35:42 1215

原创 C语言:指针(第三天)

定义:函数指针本质上是指针,它是函数的指针(定义了一个指针变量,变量中存储了函数的地址)。函数都有一个入口地址,所谓指向函数的指针,就是指向函数的入口地址。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。定义:本质上是函数,这个函数的返回值类型是指针,这个函数称为指针函数。在函数中不要直接返回一个局部变量的地址,因为函数调用完毕后,局部变量会被回收,使得返回的地址就不明确。实参是指针类型,形参是字符数组(在函数内部不能对字符串中的字符做修改)

2024-12-16 19:25:47 1060

原创 C语言:指针(第二天)

通过指针引用数组元素引用一个数组元素,可以用:① 下标法:如a[i]形式。② 指针法:如*(a+i)或者*(p+i)。其中a是数组名,p是指向数组元素的指针变量,其初值:p = a;需求:有一整型数数组a,有10个元素。输出数组中的全部元素。分析:要输出个元素的值,有三种方法。下标法:通过改变下标输出所有元素指针法:通过数组名计算出数组元素的地址,找出数组元素值指针法:用指针变量指向数组元素使用指针变量指向数组元素时,(上面第三种写法),注意一下三点:①②③。

2024-12-10 16:44:22 863

原创 C语言:分支结构

我们在程序设计往往会遇到如下的问题,比如下面的函数的计算也就是我们是必须要通过一个条件的结果来选择下一步的操作,算法上属于一个分支结构,C语言中实现分支结构主要使用if语句。

2024-12-09 19:34:16 849

原创 C语言:函数

返回类型 | 类型标识符] 函数名([形参列表]) // 函数头 | 函数首部函数体语句;// 函数体,整个{}包裹的内容都属于函数体(包括返回值)返回类型:函数返回值的类型函数名:函数的名称,遵循标识符命名(使用英文字母、数字,_,不能以数字开头,建议小写+下划线命名法)形参列表:用于接收主调函数传递的数据,如果有多个参数,使用分隔,且每一个形参都需要指定类型。函数的返回类型,就是返回值的类型,两个类型可以不同,但必须能够进行转换。

2024-12-09 19:15:17 1051

原创 C语言:指针(第一天)

内存地址:系统为了内存管理的方便,将内存划分为一个个的内存的单元(通常1个字节),并为每一个内存单元进行编号。内存单元的编号称之为该内单元的地址。一般情况下,我们每一个变量都是由多存单元构成的,多以每个变量的内存地址,其实就是这个变量对应的第一个内存单元的地址,也叫基地址/首地址。变量指针变量地址称之为改变了的指针(本质是地址)。变量地址往往是指变量在内存中的第一个内单元的编号(首地址)。int a;&a --- 变量a的地址,也称为变量a的指针int arr[2];

2024-12-09 19:06:31 1154

原创 C语言:数组(补充)

二维数组本质是一个行列式的组合,也就是说二维数组是由行和列两部分组成。二维数组数据是通过行列进行解读。二维数组可被视为一个特殊的一维数组,相当于二维数组又是一个一维数组,只不过它的元素是一维数组。(也就是说数组的元素可以是数组类型){3,4,5}

2024-12-05 17:25:28 1189

原创 C语言:数组

数组是相同类型有序数据的集合。类型说明符 数组名 [ 数组容量 ]数组的类型说明符由数组中的元素来决定,也就是元素是什么类型,数组就是什么类型。数组名也是标识符,我们所说的数组[名],大家可以理解为数据类型是数组的变量(名)。命名规则与变量名相同。遵循标识符命名规则。数组容量也可以叫做元素个数或者常量表达式,表达式必须为整型,可以包含常量和符号常量,但不能是变量。int arr[5];// 常量5// 符号常量// 常量表达式类型:代表了数组中元素的类型。

2024-12-03 17:32:28 1200

原创 C语言学习笔记:循环结构

代码的重复执行,就叫做循环。

2024-12-02 17:47:47 1340

原创 C语言学习笔记:流程控制和数据输入输出

广义的说,为解决一个问题而采取的方法和有限的步骤,就称为“算法”例如:将大象放入冰箱的算法就可以如下描述:打开冰箱门-把大象装进去-关闭冰箱门。

2024-11-28 19:07:01 1192

原创 C语言学习笔记:运算符

整型、实型、字符型数据间可以进行混合运算,如:运算时,参加运算的两个数据如果类型不同,则首先将其类型转换成一致在运算,转换规则是:将优先级低的类型转换到优先级高的类型,被称作自动类型转换。自动类型转换的形式为:大类型类型 变量名 = 小类型变量;注意:在混合运算过程中,系统所进行的类型转换并不改变原数据的类型,只是在运算过程中将其值变成同类型后再运算。int a = 10;// a只是在运算过程中临时将其值变成double,但是a本身并没有改变类型。

2024-11-28 08:46:48 827

原创 C语言学习笔记:常量与变量

用编译预处理命令。

2024-11-26 19:13:58 1003

原创 C语言学习笔记:数据类型

char 变量列表;案例:​int main()char c1,c2;c1 = 'A';c2 = 'B';// c1=A,输出的是字符本身// c2=B,输出的是字符本身// c1=65,输出的是字符对应的ASCII码编号// c1=66,输出的是字符对应的ASCII码编号说明:一个字符变量只能存放一个字符。C的编译系统都规定以一个字节的存储空间来存放一个字符,因此,一个字符变量在内存中的大小是1字节(占1个字节)

2024-11-26 19:10:44 736

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除