自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 atoi函数的实现(考虑不同进制、溢出)

atoi就是将ASCII码表示的字符转换为int型数据对于该函数的实现要考虑以下方面:1、输入字符串为NULL;2、输入开始是否包含符号’+’、’-’;3、输入的字符是否合法(是否为’0’~‘9’);4、计算出的数值必须为unsigned int,才能判断是否溢出;5、数据溢出的处理(上溢出时,反回最大正数;下溢出时,反悔最大负数);6、输入的字符包含空格;7、进制的考虑,考虑16进制和8进制,通过开头为0或0x判断;8、对于不同进制的判断范围不同;对8进制:01234567对10进制

2021-06-24 14:34:59 633

原创 C++:STL

STL一、STL-容器(容器的简单使用,底层实现,适用场景)1> vector2> list3> deque4> set/multiset5> map/multimap6> stack,queue/priority_equal二、STL-函数对象1> 一元函数对象2> 二元函数对象(less、less_equal、greater、greater_equal)三、迭代器1> iterator2> const_iterator3> reverse

2021-06-15 15:53:43 189

原创 C++:智能指针

智能指针auto_ptrunique_ptrshared_ptrweak_ptrscoped_ptrauto_ptrauto_ptr是C++标准库中为了解决资源泄露的问题提供的一个智能指针模板,是一种简单的智能指针功能:动态分配对象以及当对象不再需要时自动执行清理实现原理:在构造的时候获取资源,在析构的时候释放资源,并进行相关指针操作的重载,使用起来和普通指针类似,但由于其构造函数声明为explicit,因此不能通过隐式转换来构造,只能显示调用构造函数auto_ptr<string>

2021-06-09 18:41:55 115

原创 C++:继承与多态

继承与多态一、继承的思想二、虚函数,多态的思想三、纯虚函数和抽象类四、虚继承一、继承的思想二、虚函数,多态的思想三、纯虚函数和抽象类四、虚继承

2021-06-06 18:40:47 205

原创 C++:运算符重载

运算符重载形象概念1.浅拷贝2.深拷贝3.写时拷贝4.内存池的设计及其思想new和delete的使用new的两个缺点默认内存管理函数的不足内存池的定义内存池优点内存池的分类内存池设计内存池代码实现形象概念拷贝构造函数默认的是浅拷贝。当不涉及到堆内存时用浅拷贝完全可以,否则就需要深拷贝了。浅拷贝相当于一个箱子有多个钥匙,但其中一个人打开箱子取走箱子里的东西时,其他人是不知道的。深拷贝是有多个箱子每个箱子对应一个钥匙,但一个人取走他的钥匙对应的箱子里的东西时,不会对其他人产生影响。1.浅拷贝位拷贝,

2021-06-01 17:00:13 43185 3

原创 C/Cpp中虚函数不可用 static 修饰的原因

因为在多态时,父类调用虚函数的过程如下:(1)使用 this 指针找到虚函数表指针;(2)通过虚函数表指针获取到虚函数表。(3)通过指针偏移获取实际的虚函数的指针。(4)通过虚函数指针完成调用。所以根据上述步骤,若没有 this 指针,第(1)步就无法执行,也就无从谈起多态。链接: 参考文章链接....

2021-05-31 21:16:39 203

原创 C++:类和对象

类和对象一、面向对象的思想二、封装的思想三、const的用法四、static的用法1、static修饰变量2、static修饰函数五、类中的几个默认的函数及其特点1、构造函数2、析构函数3、拷贝构造函数4、赋值运算符的重载函数一、面向对象的思想&esmp;&esmp;面向对象的程序设计语言必须有描述对象及其相互之间关系的语言成分。系统中一切事物皆为对象;对象是属性及其操作的封装体;对象可按其性质划分为类,对象成为类的实例;实例关系和继承关系是对象之间的静态关系;消息传递是对象之间动态联

2021-05-31 21:13:02 197 1

原创 C/C++的区别

C/C++的区别1、new 和 malloc 的区别2、函数重载(重定义),C++函数符号的生成规则函数重载C++函数符号的生成规则3、引用与指针的区别4、inline 函数的特点,与宏,普通函数,static 修饰的函数的区别inline函数的特点inline函数与普通函数、宏、static修饰的函数的区别5、C/C++的相互调用1、导出C函数以用于C或C++的项目2、导出 C++ 函数以用于C语言项目3、C++调用C库4、C调用C++库1、new 和 malloc 的区别  malloc与free是

2021-05-30 18:01:06 339 1

原创 C++:虚拟地址空间布局

对于每一个进程都会对应一个虚拟地址空间,对于32位的操作系统(其指令的位数最大为32位,因此地址码最多32位),虚拟地址空间的大小为2^{32}B即0~4GB的虚拟地址空间,其中内核空间为1GB,64位操作系统同理。由于每个进程都不能直接访问内核空间,而是通过系统调用间接进入内核,因此,所有的进程都共享内核空间。而每个进程都拥有各自的用户空间,各个进程之间不能相互访问彼此的用户空间。因此,对每一个具体的进程而言,都拥有4GB的虚拟地址空间。一个程序在经过编译、链接之后形成的地址空间是一个虚拟的地址空间,

2021-05-30 16:05:47 861

原创 C++:编译链接运行原理

编译链接运行原理1.预编译(生成.i文件)*1>将所有的“#define”删除,并展开所有宏;2>处理所有条件预编译指令,如“#if”、"#ifdef"、"#elif"、“#else”、“#endif”;3>处理“#include”预编译指令,将包含的文件插入到该预编译指令的位置,这是一个递归的过程,即被包含的文件可能包含其他文件;4>删除所有注释“//”和“/* */”;5>添加行号和文件名标识,以便于编译时编译器产生调用的行号信息,用于编译时产生编译错误或警告时

2021-05-30 14:38:09 149

原创 内联函数和宏的差别是什么?

内联函数和普通函数相比可以加快程序运行的速度,因为不需要中断调用,在编译的时候内联函数可以直接被镶嵌到目标代码中。而宏只是一个简单的替换。 **内联函数要做参数类型检查,这是内联函数跟宏相比的优势。** inline是指嵌入代码,就是在调用函数的地方不是跳转,而是把代码直接写到那里去。对于短小的代码来说inline增加空间消耗换来的是效率提高,这方面和宏是一模一样的,但是inline在和宏相比没有付出任何额外代价的情况下更安全。至于是否需要inline函数,就需要根据实际情况来取舍了...

2021-03-10 09:27:05 192

原创 sizeof的使用场合

(1)sizeof操作符的一个主要用途是与存储分配和I/O系统那样的例程进行通信。(2)用它可以看看某种类型的对象在内存中所占的单元字节。(3)在动态分配一对象时,可以让系统知道要分配多少内存。(4)便于一些类型的扩充。在Windows中有很多结构类型就有一个专用的字段用来存放该类型的字节大小。(5)由于操作数的字节数在实现时可能出现变化,建议在设计操作数字节大小时用sizeof代替常量计算。(6)如果操作数是函数中的数组形参或函数类型的形参,sizeof给出其指针的大小。...

2021-03-10 09:01:06 249 1

原创 sizeof与strlen之间的区别

(1)sizeof操作符的结果类型是size_t,他在头文件中的typedef为unsigned int类型。这类型保证能容纳实现所建立的最大对象的字节大小。(2)sizeof是运算符,strlen是函数。(3)sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以“\0”结尾的。sizeof还可以用函数做参数。(4)数组做sizeof的参数不退化,传递给strlen就退化为指针。(5)大部分编译程序在编译的时候就把sizeof计算过了,所以类型或是变量的长度是sizeof(x

2021-03-08 16:00:51 113

原创 const与#define相比有什么不同?

C++语言可以用const定义常量,也可以用#define定义常量,但前者相较于后者有以下优点:1.const常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查,而对后者只进行字符替换,没有类型安全检查,并且在字符替换中可能会产生意料不到的错误(遍及效应)。2.有些集成化的调试工具可以对const常量进行调试,但是不能对宏常量进行调试。在C++程序中只使用const常量而不使用宏常量,即const常量完全取代宏常量。...

2021-03-08 15:04:15 112

原创 后置++和前置+=对指针使用的影响

int arr[] = {6,7,8,9,10};int *ptr = arr;*(ptr++) += 123;printf("%d,%d\n",*ptr.*(++ptr));后置++为先进行运算,再对所指位置进行++,故此处6将变为129,而又因为所用编译器(vs2019)为从右向左入栈,且printf语句为前置++,所以将指向8所在位置,输出结果为8,8。...

2021-02-26 16:07:04 234

原创 x&(x-1)的作用

有如下代码,判断代码功能int func(x) { int countx = 0; while(x) { countx ++; x = x&(x-1); } return countx; }举例验证按位与运算3 00112 00104 01000 00005 01014 01006 01104 0100观察可得通过此语句每次去掉了数字二进制写法中最右边的0,所以

2021-02-26 11:38:59 370

原创 问题总结:0xC0000005: 写入位置 0x00A70000 时发生访问冲突

问题总结今天在VS2019的使用过程中,在使用scanf_s函数给字符串赋值时,发生了错误,通过调试系统给出了如下提示:0x7C7DE63C (ucrtbased.dll)处(位于 Project1.exe 中)引发的异常: 0xC0000005: 写入位置 0x00900000 时发生访问冲突。而这个问题的引起原因主要是函数使用方法的错误众所周知,由于scanf函数可能发生的数组越界问题...

2020-03-28 16:23:06 6668 4

原创 C语言中对于交换函数(SWAP)的编写

一个函数想修改另一个函数的值,必须做到两点1.传指针;2.解引用;正确代码void Swap(int *p1,int *p2) { int tmp = *p1; *p1 = *p2; *p2 = tmp;}错误示范1:未传指针造成无法交换void Swap_err1(int a,int b){ int tmp = a; a = b; b = tmp;}错误示范...

2020-03-21 17:39:47 2039

空空如也

空空如也

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

TA关注的人

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