- 博客(18)
- 收藏
- 关注
转载 [C++] 重载new和delete
1、new和delete表达式的工作机理1)new表达式实际执行了三步string *sp=new string(“aaaa”);string *arr=new string[10];//string采用默认初始化a、调用一个名为operator new(或者operator new[])的标准库函数,分配一块足够大的、原始的、未命名的内存空间,来准备存储对象或者对象的数组;b、编译器运行相应的构造函数构造这些对象,在这里运行的是string的构造函数;c、返回一个指向该对象或者对象数组的指
2021-11-29 22:52:16
269
原创 拷贝构造函数调用时机
C++中拷贝构造函数调用时机通常有三种情况使用一个已经创建完毕的对象来初始化一个新对象值传递的方式给函数参数传值以值方式返回局部对象class Person {public: Person() { cout << "无参构造函数!" << endl; mAge = 0; } Person(int age) { cout << "有参构造函数!" << endl; mAge = age; } Person(const Pe
2021-08-09 20:41:57
491
转载 操作系统P/V操作(V操作中的典型理解偏差)
信号量是操作系统提供的⼀种协调共享资源访问的⽅法。通常信号量表示资源的数量,对应的变量是⼀个整型( sem )变量。另外,还有两个原⼦操作的系统调⽤函数来控制信号量的,分别是:P 操作:将 sem 减 1 ,相减后,如果 sem < 0 ,则进程/线程进⼊阻塞等待,否则继续,表明 P操作可能会阻塞;V 操作:将 sem 加 1 ,相加后,如果 sem <= 0 ,唤醒⼀个等待中的进程/线程,表明 V 操作不会阻塞;P 操作是⽤在进⼊临界区之前,V 操作是⽤在离开临界区之后,这两个操作是
2021-05-21 21:18:59
3200
1
转载 进程同步/异步的区别
原文链接进程同步:这是进程间的一种运行关系。“同”是协同,按照一定的顺序协同进行(有序进行),而不是同时。即一组进程为了协调其推进速度,在某些地方需要相互等待或者唤醒,这种进程间的相互制约就被称作是进程同步。这种合作现象在操作系统和并发式编程中属于经常性事件。具有同步关系的一组并发进程称为合作进程间接制约:当两个进程需要同一资源时,当A进程占用资源时,B进程就不能使用资源,从而导致阻塞,当A进程使用完毕时,B进程才能从阻塞状态转为就绪状态; 直接制约:A进程需要获取写入内存,B进程需要从此内存中读出数据
2021-05-21 17:27:20
904
原创 const修饰类成员函数
常函数成员函数后加const后我们称为这个函数为常函数常函数中不可以修改成员属性成员属性声明时加关键字mutable后,在常函数中依然可以修改class Person{ public: //this指针的本质 是指针常量 指针指向的位置不可改变 //在成员函数后面加const,修饰的是this指向,让指针指向的值也不可修改 等于 (const Person * const this;) void showPerson() const{ //this->A = 100;
2021-05-13 10:03:04
273
原创 三种构造函数的初始化方法
直接上代码 ↓↓↓↓class Person{ public: Person(){ cout << "Person的构造函数的调用" <<endl; } Person(int a){ age = a; cout << "Person有参构造" << endl; } //拷贝构造函数 Person(const Person &p){ age = p.age; cout << "Per
2021-05-11 22:12:40
1365
原创 const修饰指针
const修饰指针常量指针 const int p1 = &a可以改变指针指向的地址,但不可以改变指针指向地址的值;指针常量 int * const p2 = &a可以改变指针指向地址的值,但不可以改变指针指向的地址const既修饰指针也修饰常量 const int const p3 = &a既不可以改变指针指向地址的值,也不可以改变指针指向的地址一段代码示例(读者可自行摘取运行):#include <iostream>usi
2021-05-06 22:18:41
119
原创 fopen函数的各种参数 r+ w+ a+ ab+
文件mode参数函数 : FILE *fopen(const char * path,const char * mode);const char * mode具有以下参数:r :打开只读文件,该文件必须存在。w :打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。a :以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。rb :打开一个二进制文件,只允许读取操作wb :打开(创建)一个二
2021-04-25 21:13:40
12514
原创 fork()创建多个子进程
fork()创建多个子进程在学习linux中,老师布置了一个作业:编写一段程序,使用系统调用fork)创建两个子进程。当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示"a";子进程分别显示字符"b“和字符"c"。试观察记录屏幕上的显示结果,并分析原因。#include <stdio.h>#include <stdlib.h>#include <unistd.h>int main(){ pid_
2021-04-20 23:00:57
9662
3
转载 转载 | fork()函数详解
原文链接,直达原文更清晰!!!建议看原文!!!本文只做转载记录原文链接,直达原文更清晰!!!建议看原文!!!本文只做转载记录原文链接,直达原文更清晰!!!建议看原文!!!本文只做转载记录一、fork入门知识一个进程,包括代码、数据和分配给进程的资源。fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间。然后把原
2021-04-20 20:50:23
973
原创 无头链表有序插入
无头链表有序插入#include <stdio.h>#include <stdlib.h>typedef struct list { int num; struct list *pNext;}Node,*pNode;//有序插入void listInsertSort(pNode * pHead, pNode* pTail, int value) { pNode pNew = (pNode)calloc(1, sizeof(Node));//申请空间,自带mems
2021-04-19 21:48:10
185
原创 一文看懂一级指针与二级指针
一文看懂一级指针与二级指针指针即是指向一个变量地址的变量,把它当作普通的变量来看,只是定义指针的写法与普通变量不同,加了个 * 。那么我们就从有 * 和无 * 来理解。int a = 1;int *p; //int *p = &a;p = &a;printf("*p=%d\n",*p);初始化指针变量有两种方法,先定义(int *p),然后再赋值(p = &a),* 号只是表明定义了一个指针型的变量,再使用 p 的时候,p表示的是地址——定义指针变量的时候有 * ,
2021-04-12 08:05:20
289
原创 指针与数组小例
指针与数组一个数组名指向的即是这个数组的首地址,那么将数组名赋给一个指针变量,就可以用指针来操作数组的内容,那么来看一个栗子,了解一下指针如何来改变数组中的值。#include <stdio.h>#include <stdlib.h>int main() { int a[3] = { 1,3,5 }; int *p = a; //定义一个指针变量,将数组a的首地址传给p int j; j = *p++; //可分解为j=*p,*p++ printf("a[0]=
2021-04-08 22:44:48
150
原创 字符串输入输出总结
类型注意事项作用返回值用法%s遇到空格会结束!!!!会忽略’\n’输入字符串-------scanf("%s",s)%c会读取输入的 ‘\n’,读取空格输入字符-------scanf("%c",c)getchar()输入 ‘\n’,空格有效获取字符EOFc=getchar()putchar()会输出缓冲区的 ‘\n’,读取空格输出字符EOFputchar©gets()输入’\n’无效,空格有效,会进入缓冲区输入一行字符串...
2021-04-02 10:35:00
205
原创 字母小写转大写简单实例,getchar()原理和fflush(stdin)
先来看一段代码#include <stdio.h>#include <stdlib.h>int main(){ char c; while((c=getchar()) !=EOF){ printf("%c\n",c-32); } system("pause"); return 0;}此时我们可以输入多个字符,键盘输入的字符都会存到缓冲区,getchar()会先从缓冲区读取内容,所以当输入多个字符时,条件成立,get
2021-03-31 14:33:55
882
原创 了解scanf缓冲区
scanf缓冲区在学习scanf之前,先来了解以下“缓冲区”这个概念。我们从键盘输入的都是字符,scanf中的“%d”会将从键盘中输入的字符转换为整型,其它类型亦如此。当我们从键盘输入时,数据会先存入缓冲区。但是!当我们输入一个整型数字时,会用回车来结束,那么回车这个按键也会留在缓冲区,对应的时 ‘\n’ 。了解这一点,然后我们来看一个栗子。#include <stdio.h>#include <stdlib.h>int main() { int m; char c;
2021-03-30 20:44:56
1062
原创 浮点型详解
整型数据类型所占字节表示范围(singned)int4-2312^{31}231 ——2312^{31}231-1(singned)short2-2152^{15}215 ——2152^{15}215-1(singned)long4(64位为8字节)-2632^{63}263 ——2632^{63}263-1unsigned int40——2322^{32}232-1unsigned short20——65535unsigned lo
2021-03-29 22:12:02
3847
原创 基本DOS命令
打开CMD方式开始+系统+命令提示符Win键 + R 输入cmd打开控制台在任意的文件夹下面,按住shift键 + 鼠标右键点击,在此处打开命令行窗口资源管理器的地址栏前面加上 cmd 路径管理员方式运行:选择以管理员方式运行常用的Dos命令#盘符切换 D:#查看当前目录下的所有文件 dir#切换目录 cd 当前在E:\> 如何切换到F盘具体文件夹 输入 cd /d F:\software#清理屏幕 cls (ckear screen)#退出终端 exit#查看电脑
2021-03-16 21:15:17
107
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人