自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(71)
  • 问答 (1)
  • 收藏
  • 关注

原创 内存对齐——#pragma pack()用法

C/C++编译器的缺省字节对齐方式为自然对界。即在缺省情况下,编译器为每一个变量或是数据单元按其自然对界条件分配空间。编译器缺省的结构成员自然对界条件为“N字节对齐”,N即该成员数据类型的长度。如int型成员的自然对界条件为4字节对齐,而double类型的结构成员的自然对界条件为8字节对齐。若该成员的起始偏移不位于该成员的“默认自然对界条件”上,则在前一个节面后面添加适当个数的空字节。

2023-08-10 14:05:37 783

原创 线性表之顺序表(C++版)

线性表之顺序表(C语言版本)SeqlistC.h文件。test.cpp测试代码。

2022-11-26 20:14:23 500 1

原创 线性表之顺序表(C语言版)

seqlist.h文件包含结构体的定义,函数的声明。list.cpp文件,顺序表的初始化以及函数实现。test.cpp测试代码。

2022-11-14 18:05:10 233

转载 函数:realloc

C 库函数尝试重新调整之前调用或所分配的所指向的内存块的大小。

2022-11-14 17:43:17 122

原创 数据结构结构体

假设L是SqList类型的变量,则L为单链表的头指针,它指向表中第一个节点。若L为空,(L=NULL),则所表示的线性表为“空”表,其长度n为“零”。有时,我们在单链表的第一个结点之前设一个结点,称为头结点头结点的数据域可以不存储任何信息,也可以存储线性表的长度等类的附加信息,头结点的指针域指向第一个结点的指针(即第一个元素结点的存储位置)。当你创建的是SqList 指针创建时,SqList list用list->data表示数据。②若定义的结构体指针,则访问数据时用"->";,指针指向整个结构体。

2022-11-14 12:01:56 372

原创 生产者消费者问题

生产者/消费者问题,也被称作问题。可以描述为∶两个或者更多的线程共享同一个缓冲区,其中一个或多个线程作为"生产者"会不断地向缓冲区中添加数据,另一个或者多个线程作为"消费者"从缓冲区中取走数据。生产者/消费者模型关注的是以下几点:1.生产者和消费者必须2.缓冲区空时,消费者不能读取数据;缓冲区满时,生产者不能添加数据因为多了一个缓冲区,所以生产者和消费者并不直接相互调用,这样生产者和消费者的代码发生变化,都不会对对方产生影响。...

2022-08-02 18:53:02 434 1

原创 MVC模型:日历系统

MVC模型日历系统。

2022-07-26 20:22:58 333

原创 进程间通信( IPC):消息队列

进程间通信 IPC :管道、信号量、共享内存、消息队列、套接字进程间通信,两个进程间传递信息除了套接字,前面几个主要是在同一台主机上两个进程间通信通过ipcs查看消息队列 消息队列与命名管道有许多相似之处,但少了在打开和关闭管道方面的复杂性。但使用消息队列并未解决我们在使用命名管道时遇到的一些问题,比如管道满时的阻塞问题。 消息队列提供了一种在两个不相关的进程之间传递数据的相当简单且有效的方法。与命名管道相比,消息队列的优势在于,它独立于发送和接收进程而存在,这消除了在同步命名

2022-07-09 16:43:49 522

原创 进程间通信(IPC):共享内存

进程间通信(IPC):共享内存。共享内存是先在物理内存上申请一块空间,多个进程可以将其映射到自己的虚拟地址空间中。所有进程都可以访问共享内存中的地址,就好像它们是由 malloc 分配的一样。如果某个进程向共享内存写入了 数据,所做的改动将立刻被可以访问同一段共享内存的任何其他进程看到。由于它并未提供同步机制,所以我们通常需要用其他的机制.........

2022-07-05 15:33:29 445

原创 进程间通信(IPC):信号量

进程间通信 IPC :管道、信号量、共享内存、消息队列、套接字进程间通信,两个进程间传递信息除了套接字,前面几个主要是在同一台主机上两个进程间通信像现实生活中的红绿灯,用来控制资源的使用信号量:特殊的变量(一般为正数),代表可用资源的数目减一 : 代表获取资源(p操作)加一 : 代表释放资源(v操作)(例如商场试衣间是可用资源,若有人使用,可用资源减一,有人出来,可用资源加一)信号量变为0的时候,代表没有资源可用,再使用资源会阻塞pv操作是一个原子操作,就是不可分割的操作信号量的值如果只取0,1 ,将其称为

2022-06-19 15:51:36 389

原创 进程间通信(IPC):管道

进程间通信 IPC :管道、信号量、共享内存、消息队列、套接字进程间通信,两个进程间传递信息除了套接字,前面几个主要是在同一台主机上两个进程间通信管道分为有名管道和无名管道使用 | , bash 可以自动创建一个有名管道还是可以使用open(打开管道,分配的空间在内存中)read(读取数据) write(写入数据)close(关闭管道)eg:文件a和文件b,文件a负责向管道中写数据,文件b负责读数据a.c文件b.c文件a,b文件单独执行时会被阻塞住 管道必须在两个进程间执行,单个进程是没法执行的

2022-06-17 21:03:12 229

原创 gdb调试

gdb 调试程序编译程序的时候需要后面加上-g,将调试信息添加在可执行文件中eg:编译mybash文件不加调试信息前加上调试信息后,可执行文件变大 eg:一般只显示10行,一般从主函数位置开始显示显示行数附近的代码显示此函数附近的代码 此时上一次命令是 l 显示代码......

2022-06-17 10:20:47 99

原创 this指针

c++对象模型:各对象的代码区公用区分对象时根据属性值区分的,对象的方法都是一样的。上图对象只存储自己的属性,方法共享,这种模型可以大大节省空间。但是有一个问题,方法(也就是函数)如何区分处理的是哪一个对象——this指针!通过this指针判断是哪一个对象this指针编译器针对程序员自己设计的类型分三次编译。第一:识别和记录类体中属性的名称,类型和访问限定,与属性在类体中的位置无关。如class CGoods中的Name,Amount,Price,Total_

2022-05-24 09:33:39 128

原创 信号

信号:通知进程产生了某种事件信号是系统响应某个条件而产生的事件,进程接收到信号会执行相应的操作。与信号有关的文件调用在“signal.h”头文件中有声明。信号其实就是一个软件中断。可以通过signal()修改对信号的响应方式。信号一般有三种响应方式:1)默认响应;2)忽略响应;3)自定义响应。通过 kill 发送响应。int kill(pid_t pid, int sig);命令kill 就是对系统调用kill 的封装,命令kill就是通过系统调用kill给程序发送一个信号.

2022-05-21 21:50:10 216

原创 String

c++中定义一个字符串变量可以直接使用string string str = "zyt";string 有许多方法:元素访问: at 访问指定字符,有边界检查 (公开成员函数) operator[] 访问指定字符 (公开成员函数) front (C++11) 访问首字符 (公开成员函数) back (C++11) 访问最后的字符 (公开成员函数)

2022-05-19 20:17:38 207

原创 typedef 和 using

typedef是在计算机编程语言中用来为复杂的声明定义简单的别名。typedef 可以将一切合法的变量名(指针名,数组名)转化为类型名。typedef 具体讲解见文章:typedef_♚陌上花开的博客-CSDN博客http://t.csdn.cn/zkjfuhttp://t.csdn.cn/zkjfuusing 和typedef 的用法相同,都是用来给复杂的声明定义简单的别名的。typedef unsigned int u_int;//u_int 就是unsigned int类型usin

2022-05-19 15:10:26 333

原创 基于范围的for循环

在c98中,不同的容器和数组,遍历的方法不尽相同,写法不统一。c++11基于范围的for循环以统一,简洁的方式来遍历容器和数组,用起来更方便了。c++标准库里的容器:#include<array> 数组容器#include<vector> 向量容器,顺序表容器#include<list> 双链表容器#include<map> 映射容器(底层是红黑树)#include<set...

2022-05-19 11:36:30 248

原创 C11的新特性-auto关键字,decltype关键字

C++11引入了auto(类型识别)和decltype(类型推演)关键字实现类型推导,通过这两个关键字不仅能方便地获取复杂的类型,而且还能简化书写,提高编码效率。一、auto关键字C11中auto成为类型指示符(type-specifier)。auto类型推导: auto定义的变量,可以根据初始化的值,在编译时推导出变量名的类型。int main(){ auto a = 10;//a int auto ip = new auto(1);//1 是整型,将整型的地址给ip, ip in

2022-05-19 10:13:35 445

原创 进程替换和malloc

一、进程替换方式:1>使用exec系列库函数#include <unistd.h>extern char **environ;int execl(const char *pathname, const char *arg, .../* (char *) NULL */);int execlp(const char *file, const char *arg, .../* (char *) NULL */);int execle(const char *pathn

2022-05-19 09:27:01 177

原创 Linux vim中如何不带行号复制大段代码

目录1>只可以在vim复制2>可以复制到外界的1>只可以在vim复制末行模式下 使用命令 v 进入可视模式此时使用 “上下左右键”,选中想要复制的部分,在vim中可以看到选中的文本变颜色,就像在windows系统下的shift键加上鼠标左键的效果一样命令 y 复制,p粘贴2>可以复制到外界的按照常规复制,结果如下 1 #include<stdio.h> 2 #include<stdlib.h..

2022-05-18 13:25:37 2071 5

原创 文件描述符,Linux操作系统文件的系统调用 open read write close

fork——父进程打开的文件fork复制到子进程中,子进程也可以访问。c 语言使用 fopen(),打开一个文件,文件类型为 FILE*fclose()关闭文件。Linux通过操作系统的子模块——文件系统来管理文件通过文件id号来管理文件,每个文件的ID号是唯一的一、 openc语言中使用fopen打开文件,fopen是库函数。Linux 通过open打开文件,是一种系统调用,在内核中实现。fopen->open(),fopen底层调用open包含头文件#inc

2022-05-17 17:53:58 1334

原创 僵死进程,孤儿进程

一、僵死进程 1 #include<stdlib.h> 2 #include<unistd.h> 3 #include<stdio.h> 4 int main() 5 { 6 int n=0; 7 char *s = NULL; 8 9 pid_t id = fork(); 10 if(id == -1) 11 { 12 exit(1); 13 }

2022-05-11 14:20:41 224

原创 Linux:printf

linux中常用头文件:#include<stdlib.h>此头文件包含函数exit(0); 用来退出当前进程,windows上习惯用return 0;使用return 0;系统会帮忙调用exit(0);#include<unistd.h>包含了Linux常用的函数调用以及系统声明头文件存放于/usr/include中printf中\n的用处有以下main.c文件此时printf函数输出内容具有换行符,sleep3s后结束程序...

2022-05-09 16:49:23 1554

原创 库文件的生成和使用

一、库文件库是一组预先编译好的函数方法的集合Linux上库文件的存放位置: /lib和/usr/lib库分为两种:静态库和共享库Linux上静态库标识(libxxx.a),共享库(libxxx.so)Windows上静态库标识(.lib),共享库(.dll)二、静态库的生成和使用1)静态库的生成这里有生成静态库的文件,其中add.c,max.c存放函数的实现,其中fun.h存放函数的声明如何生成静态库?第一步:将静态库需要的".c"文件进行编译,生成"".o"文件

2022-05-06 15:00:48 1004 1

原创 makefile和make

一、make的安装输入命令:sudo apt install make需要密码,根据提示输入密码即可。二、makefile和make命令的介绍makefile文件:Linux上的项目工程管理工具,可以实现自动化编译。主要用于项目工程里源文件过多,makefile文件可以根据类型,功能,模块,将这些源文件分好到不同目录里,makefile文件里面就可以定义一系列的规则来指定哪一些文件先需要进行编译,文件需要重新编译,甚至更复杂的操作,makefile文件就像一个shell脚本一样,可以一系

2022-05-05 18:47:34 2359 5

原创 编译与调试

gcc主要处理c语言中的.c文件c语言 .c文件如果想要直接去运行,首先需要将源文件变成可执行文件这个过程可以细分为四个过程:预编译,编译、汇编、链接gcc分步编译:(1)预编译gcc -E main.c -o main.i(-o :out输出,输出想要得到的文件(自己命名),不加-o,生成一个默认的文件)(2)编译gcc -S main.i -o main.s(3)汇编gcc -c main.s -o ...

2022-04-28 17:26:36 561

原创 函数重载

依据:名字粉碎技术在C语言函数的定义中,函数名必须为它们加以区别的,完成同一个任务的函数常常需要根据调用参数个数的不同或类型的不同而定义多个不同的函数名。在C++中,提供了函数的重载机制,对功能相同但参数个数不同或类型不同的函数可以使用相同的函数名,由此,在调用时无需定义多个函数名,而由编译器根据参数类型选择被调函数。C语言区分函数的不同通过函数名区分,c++通过函数原型(函数返回值+函数名称+参数列表(参数的类型和个数))区分。int max(int a, int b){ return

2022-04-26 21:16:15 176

原创 缺省参数

一般情况下,函数调用时的实参个数应与形参相同,但为了更方便地使用函数,C++也允许定义具有缺省参数的函数,这种函数调用时,实参个数可以与形参不相同。缺省参数指在定义函数时为形参指定缺省值(默认值)。这样的函数在调用时,对于缺省参数,可以给出实参值,也可以不给出参数值。如果给出实参,将实参传递给形参进行调用,如果不给出实参,则按缺省值进行调用。缺省参数的函数调用:缺省实参并不一定是常量表达式,可以是任意表达式,甚至可以通过函数调用给出。如果缺省实参是...

2022-04-26 18:42:16 653

原创 如何判断是以c++方式编译还是c方式编译

如何判断是以c++方式编译还是c方式编译

2022-04-21 17:27:19 1026

原创 C++统一初始化和输入输出

一、c++统一初始化C语言中初始化一个量只有赋值语句这一种办法c++中初始化方式比较多#include<iostream>using namespace std;int main(){ int a = 10;//c语言中初始化只有赋值语句这一种方法 //以下都是c++初始化的方法 int b(10);//这样有点像对象初始化的形式 int c{ 10 };//int c = {20}; int d = int(10); int e = int{ 10 }; r

2022-04-21 16:59:32 811

原创 左值右值,柔性数组

文章目录一、右值、左值二、1.2.一、右值、左值在c中,左值就是可以被赋值的,右值就是不可被赋值的在c11标准下:所有的值必属于左值、右值两者之一。右值分为纯右值和将亡值在C++11中可以取地址的、有名字的就是左值,反之,不能取地址的、没有名字的就是右值(将亡值或纯右值)。左值有地址,名字与生存期一致,有名字就有生存期。右值不能取地址。&&引用普通对象,纯右值(只能引用右值,也就是没有名字的)右值变左值,给一个名字。二、1.2....

2022-04-17 23:22:29 360

原创 gcc ,g++,gdb的安装

1.gcc的安装sudo apt install gcc2.g++的安装sudo apt install g++3.gdb的安装sudo apt install gdb

2022-04-14 20:19:46 367

原创 文件查看命令和用户管理命令

cat1.用于查看文件数据cat a.txt2.合并文件cat a.txt b.txt > c.txt3.向文件中写入数据cat > d.txt ,这样写入数据有一点需要注意:cat > d.txt 输入数据时,会先将d.txt中的数据清空。...

2022-04-13 22:30:00 225

原创 类的继承与派生

类及对象的访问权限:类中的成员函数可以直接访问类中的数据成员(包括私有成员、公有成员、保护成员);类中的成员函数可以相互访问;类的对象只能访问类的公有成员,不能访问私有成员及保护成员。一、继承与派生在C++中,类具有继承性,所谓继承就是在一个已存在的类的基础上建立一个新的类。利用类的继承,可以将原来的程序代码重复使用,从而减少了程序代码的冗余度,符合软件重用的目标。增强编程语言的功能。提高软件开发效率。在继承关系中,被继承的类称为基类(或父类),把通过继承关......

2022-04-01 16:23:06 8602 2

原创 for()循环参数调用顺序

for(表达式1;表达式2;表达式3){ 循环体语句;}表达式1:初始化语句表达式2:判断条件语句表达式3:控制条件语句A.先调用表达式1,初始化变量;B.再调用表达式2,判断变量是否满足条件,True则继续执行,flase则结束循环;C.执行循环语句;D.调用表达式3,B,C,D,B··········(循环)打印邮费价格表,输出20kg以内物品的邮费价格表,邮费计算规则如下所示:1kg以内6元。超过1kg,每增加1kg加收2元。...

2022-03-23 12:54:10 200

原创 拷贝构造函数

同一个类的对象在内存中有完全的结构,如果作为一个整体进行复制或者拷贝是完全可行的。这个拷贝过程只需要拷贝数据成员,而函数成员是共用的(只有一份拷贝)。在建立对象时可用同一类的另一个对象来初始化该对象的存储空间,这时所用的构造函数称为拷贝构造函数。拿一个对象初始化另一个对象时,会调用拷贝构造函数。若没有拷贝构造函数,系统会给出一个默认的拷贝构造函数。...

2022-03-16 18:35:59 372

原创 友元函数,友元类,类模板

C++提供友元机制,允许外部类和函数访问类的私有成员和保护成员的辅助方法,即将它们声明为一个给定类的友元类(或友元函数),使其具有类成员函数的访问权限。但友元本身不是类的成员,它不属于任何类。优点:提高软件的可靠性、可重用性、可维护性。不足:增加了程序运行时函数的调用开销——当成员函数调用很频繁时,将导致执行效率的降低,增加程序的运行时间。友元可以是普通的函数,或已定义的其他类的成员函数,或整个类。将一个函数设为友元,称为友元函数,将一个类设为友元,称为友元类。友元类的所有成员函数都可以访问授予友

2022-03-13 15:38:23 936

原创 静态成员

为了实现一个类的多个对象之间的数据共享,C++提出了静态成员的概念。静态成员包括:静态数据成员和静态成员函数静态成员的作用:1.静态成员不属于某一个对象,而属于一个类(属于所有对象),无论建立多少个对象,都共享静态成员——是连接各个对象的桥梁。2.静态数据成员主要用于各个对象共用数据。如:总数的统计、平均数等。静态数据成员的定义:static 数据类型 数据成员名;class student{private: int num; char* name; static

2022-03-13 15:18:30 2896

原创 对象的动态建立和释放,赋值和复制

利用new运算符可以动态地分配对象空间,delete运算符释放对象空间。动态分配对象的一般形式:new 类名;用new运算符动态分配得到的对象是无名的,它返回一个指向新对象的指针的值,即所分配的内存单元的起始地址。程序通过这个地址可以间接访问这个对象,因此需要定义一个指向类的对象的指针变量来存放该地址。类名 * 对象指针变量;对象指针变量= new类名;如: student *p; p = new student;...

2022-03-13 11:35:13 1632

原创 共用数据的保护

C++有不少措施保护数据的安全性,如private保护类的数据成员等。但对于一些共用的数据,如函数实参与形参等,我们可以在不同的场合通过不同的途径访问同一个数据对象。有时不经意的误操作会改变数据的值。一、常对象既要使数据能在函数间共享,又要保证它不被任意修改,可以使用const限定,即把数据定义为只读的。在定义对象时使用const限定,称它为常对象。定义的一般形式为: 类名 const 对象名(实参列表);或 const 类名 对象名(实参列表);如: const studen..

2022-03-11 19:10:21 1371

空空如也

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

TA关注的人

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