自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【C++】智能指针

智能指针的提出:每次new出来的内存都要手动delete释放。智能指针的本质含义就是为了自动管理资源的释放,防止由于疏忽或者程序逻辑错误导致的资源泄漏问题。智能指针是一个类,这个类的构造函数中传入一个普通指针,析构函数中释放传入放入指针。1.Auto_ptr不支持复制(拷贝构造函数)和赋值(operator=),但是赋值或复制时出错但不会提示。拷贝构造没有实现,系统提供的是浅拷贝,两个指针...

2019-08-29 11:23:42 282

原创 【C++】封装、继承、多态、虚函数

1、面向对象是相对于面向过程来说的,面向对象时将功能等通过对象来实现的,将功能封装到对象中,让对象去实现具体的细节。是对数据一种优化,操作起来更加的方便,简化了过程。将现实世界中的实体转化为计算机世界中,我们将实体的属性和行为,转化为成员变量和成员方法.属性——成员变量,行为——成员方法2、封装将对象的属性和实现细节隐藏,仅对外提供公共访问方式,将变化隔离,便于使用,提高复用性和...

2019-08-29 11:16:38 329

原创 【C++】STL--------容器

1、顺序容器vector向量容器。底层是动态开辟的一维数组. 1.实现原理(关键在于对其大小的控制以及重新配置时的数据移动效率)Vector是C++STL标准模板库中的顺序容器,底层是一个内存可增长的数组动态空间,随着元素的增加,它的内部机制会自行扩充空间用来容纳新元素,每次以2倍的方式另外分配一块空间,然后将内容拷贝,之后在原内容之后构造新元素,并释放原来的空间。因此...

2019-08-29 10:36:56 211

原创 【C++】关键字explicit&&mutable&&register&&volatile

explicit当explicit修饰构造函数时,不允许隐式调用构造函数。class Test1{public: Test1(int n) { num=n; }//普通构造函数private: int num;};class Test2{public: explicit Test2(int n) { ...

2019-08-25 14:10:58 195

原创 【C++】浅拷贝、深拷贝、写时拷贝

浅拷贝不是拷贝了基本类型的数据,而引用类型数据,复制后也是会发生引用,我们把这种拷贝叫做浅拷贝。换句话说,浅复制仅仅是指向被复制的内存地址,如果原地址中对象被改变了,那么浅复制出来的对象也会相应改变。int main(){ int *p1=new int[10]; int *p2=p1; delete []p1; delete []p2;}深拷...

2019-08-25 13:48:56 247

原创 【C++】堆和栈的区别

1.32位Linux系统中每个进程的虚拟地址空间有.text,.data,.bss,堆,栈,命令行参数,环境变量等。堆是存储动态分配内存,栈是存储的是局部变量、函数参数、返回地址等。堆中的内容是匿名的,不能按名字直接访问,只能通过指针间接访问,要内存对齐,可通过系统调用brk()和sbrk()来移动break指针扩张堆,一般是系统自动调用。栈三个用途:1.为函数内部声明的非静态局部变量提供...

2019-08-25 13:46:16 220

原创 【C++】Inline函数、普通函数、static修饰的函数、宏函数的区别

1.inline函数在编译阶段,调用点展开,所以导致只能本文件可见 和普通函数最大区别在于内部实现方式 没有栈帧的开辟和回退,一般直接把内联函数写在头文件 调用时在编译期直接代码展开,不会生成符号不需要寻址,使用循环、递归、switch的函数不能声明为内联 内联函数往往替换函数体较小的函数 内联只是对编译器的建议,最终不一定成功 编译阶段有类型检查、安全检查 可以调试 Inli...

2019-08-25 13:37:44 271

原创 【C++】调用约定&&C与C++区别

1、调用约定_cdecl: C标准调用约定从右至左的顺序将参数压入栈中 形参的开辟由调用方处理,清理由调用方处理 编译后的函数名前加一个下滑线,如:_fun_stdcall:windows下标准调用约定从右至左的顺序将参数压入栈中 形参的开辟由调用方处理,清理由被调用方处理 编译后的函数名前加一个下滑线,函数名后面加一个@,如:_fun@_fastcall:快速调用约定,...

2019-08-25 13:31:31 177

原创 【剑指offer】两个栈实现一个队列

class Solution{public: void push(int node) { stack1.push(node); } int pop() { int a; if(stack2.empty()) { while(!stack1.empty()) ...

2019-08-10 08:31:46 124

原创 【C++】4G虚拟地址空间

每一个进程都有自己的4G虚拟地址空间,一个页表项负责4K的地址空间和物理内存的映射,一个页有1024项,所以一个页负责4M的地址空间映射,一个页目录项对应一个页表,一个页目录有1024项,对应着1024个页表。所以一个进程有一个页目录,以页为单位保证4G的地址空间中的每一页和物理内存的映射。在windows中4G虚拟地址空间分为低2G的用户空间和高2G的内核空间,在Linux系统中分为低3G的...

2019-07-19 12:50:08 315

原创 【C++】编译链接原理

1.预编译(gcc -E hello.c -o hello.i)预编译阶段主要处理那些源代码文件中的以“#”开头的预编译指令,并生成.i文件,.i文件属于文本文件 。处理的主要包括:删除#define并进行文本替换 #if #endif #elseif 递归展开#include 删除注释 添加行号和文件标识 保留#pragma2.编译(gcc -S hello.i -o he...

2019-07-19 10:59:14 490

转载 break ,continue ,return ,goto 四者区别

原文网址:https://blog.csdn.net/weibo1230123/article/details/80950903浅谈break 、continue、return三种语句的区别:break,continue,return这三个具有跳转功能的语句在c语言中经常被用到,近期身边有些小伙伴总是把它们的用法搞乱,在这里笔者给大家整理了一下自己对三个语句的理解,也算是自己加深一下印象吧...

2019-01-07 17:39:58 391

原创 【C语言】define和typedef的区别

#define是 宏定义命令,#define DINT int相当于将代码中的int可以写为DINT,DINT等价于int。typedef int TINT; 是类型定义,TINT类型的变量就是int类型的变量。1.typedef int TINT; 和#define DINT int 2.typedef char *SINT; 和#define PINT char*结...

2018-09-21 20:42:47 371

原创 【C语言】const的基本知识

1.int a=10;const int ca=20; a是对于ca来说是普通变量,是可读可写的,而ca则是常变量,只读,不能写,也就是不能改,下面这两行代码中,对常变量ca的值进行修改就是错误的。const int ca=20;ca=1;//error所以有,const限定写权限,将变量变成只读,不能修改值。而且在定义常变量的同时要给该常变量进行赋值。运行出错2.co...

2018-06-12 19:09:26 282

原创 【C语言】指针运算

在学习指针时,说指针也是一种变量,所以指针变量就和普通变量一样:需要占用内存,需要初始化等等。但在使用和普通变量一样的用法时,指针变量的运算就和普通变量的运算不太一样了。一:先给出一个例子吧。#include <stdio.h>int main(){ int arr[10]={1,2,3,4}; int *p=arr; printf("%d\n",*p)...

2018-06-11 00:21:40 451

原创 【C语言】用子函数进行两个变量的值交换

用子函数进行两个变量的值交换1.直接用两个变量进行传参,交换。在子函数内部进行打印。void Swap(int a,int b){ int tmp = a; a = b; b = tmp; printf("a=%d,b=%d\n",a,b);}int main(){ int a=5; int b=10; printf("a=%d,b=%d\n",a,b);...

2018-05-26 11:37:41 11009 2

原创 【C语言】进制

假设在n进制下,下面的等式成立,567*456=150216,n的值是()A.9 B.10 C.12 D.18一般的,会直接先把n带入将597和456转换为十进制的数,然后将转换之后相乘的积转换为原来的进制,最后看两个数是否相等将等号两边都按位展开567=5n^2+6n+7,456=4n^2+5n+6,150216=n^5+5n^4+2n^2+...

2018-05-26 10:12:52 207

原创 【C语言】指针

指针是内存单元的地址,也就是内存单元的编号。指针是一种数据,它是一种变量,也有数据类型。1.定义在定义整型普通变量时是:int i;这表示定义了一个整型类型的变量i,指针变量定义如下:int *p1;//定义了一个整型指针变量p1char *p2;//定义了一个字符型指针变量p2double *p3;//定义了一个浮点型指针变量p3引出了一个新的符号“*”,指针运算符*是一个...

2018-05-23 22:14:06 274

原创 【C语言】整型数字处理

整型数字处理1.统计数字个数可以先给出一个例子,如该整型数字为n=12345678,要求其个数方法:定义一个计数器count,当该整型数字n每次除以10,之后count+1,然后将整型数字n除以10之后的值赋给n,直到n等于0为止。原因:当该整型数字n每次除以10时,因为n和10两个数字都为整型,所以是整除,当n=1235678时,n/10等于1234567,就是说当该数字除以10时,等...

2018-05-19 13:33:36 856

原创 【C语言】如何调试程序——初步

如何调试程序1.如何设置断点调试程序之前要先设置断点,否则屏幕上会有一个黑框一闪而过。在设置断点之前,要知道程序出现什么问题,进一步判断应该将断点设置在什么地方。要注意可以在任意位置设置断点,但断点——“路障”,要设置在会经过的地方。设置断点可以像下图那样,这样做比较直接简单。还可以将鼠标放在要设置断点的那一行,再按F9键。2.常用的命令——启动调试,逐语句,逐过程,跳出...

2018-05-13 10:31:07 32700 1

原创 【C语言】判断一个浮点数是否等于零

判断一个数等于0一般情况下都会写成a==0;但是如果a的类型是浮点数,这样写不够好。一个数字在计算机中是以二进制的“0”“1”代码的形式存储的,计算机中对二进制位的存储是有限的。例如:1、十进制数0.625用二进制表示为0.101 (1)0.625*2=1.25------------1 (2)(1.25-1)*2=0.5--------0 (3...

2018-05-06 10:48:45 6520

空空如也

空空如也

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

TA关注的人

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