C/C++
记录学习C/C++中遇到的问题
KingSFar
Open and Share
展开
-
STL源码剖析第一章阅读笔记
STL中任何组件都有最大的独立性,并以所谓迭代器(iterator)胶合起来,或以所谓配接器(adapter)互相配接,或以所谓仿函数(funtor)动态选择某种策略。STL的六大组件:容器、算法、迭代器、仿函数、配接器、配置器从实现的角度来看,迭代器是一种将operator*、operator->、operator++、operator–等指针相关操作予以重载的class template。仿函数是一种重载了operator()的class或class template。STL提供的que.原创 2021-02-03 20:34:20 · 174 阅读 · 0 评论 -
C++中打印字符指针的地址
问题描述:今天无意中遇到一个问题,有如下程序,我想打印两个对象中的字符指针的地址来验证系统提供的赋值运算符重载是否是浅拷贝,结果直接cout字符指针输出的并不是指针的地址而是整个字符串,为什么呢?#define _CRT_SECURE_NO_WARNINGS#include <iostream>#include <string.h>using namespace std;class ClassA{public: ClassA() { } ClassA(原创 2021-01-11 21:24:51 · 2659 阅读 · 0 评论 -
局部变量或局部对象是否可以返回
一、C语言中局部变量的返回大原则:不要在自动变量(不管是表达式中间结果的临时变量(如果它不能保证总优化到寄存器中)还是源程序中有明确名字的auto变量)生命期结束后还试图解引用它。局部变量作为返回值时,一般是系统先申请一个临时对象存储局部变量,也就是找个替代品,这样系统就可以回收局部变量,返回的只是个替代品。也就是说,返回的过程中产生了“中间变量”作为纽带。但是如果返回的是局部变量的地址(指针)的话,程序运行后会出错。因为函数只是把指针复制后返回了,但是指针指向的内容已经被释放了,这样指针指向的内容原创 2020-10-29 16:58:00 · 1234 阅读 · 0 评论 -
关联容器——map和multimap的用法
一、map和multimap的区别map不允许键值对重复,但multimap允许。关联容器按照自身的特点分为八种不同的容器:仅包含关键字key还是包含键值对key-value,前者取名集合set,后者取名映射map;关键字key是否允许重复,允许重复的包含multi;是否按照hash函数映射的方式组织元素,是则加上unordered。二、map与multimap的构造首先讲一下pair类型:1、pair是定义在头文件中的一个类 模板,有两个类型参数分别对应其内部的两个数据成员,其类型原创 2020-10-26 15:51:13 · 3284 阅读 · 0 评论 -
带形参的main函数
最近学习到Linux文件I/O,意外看到了带有形参的main函数,虽然以前知道main函数可以带有形参,但一直也没有用过。形式如下:int main(int argc,char* argv[]){}由于main函数不能被其他函数调用,因此不能在程序内部取得实际值,那么该如何获得参数的值呢?实际上,main函数的参数值是从操作系统命令行上获得的!其中,argv[0]存储的是该程序的当前路径,其余存储的是从命令行获取的参数,argc表示argv[]中参数的个数。下面在Ubuntu中进行实验,代码如原创 2020-09-14 10:51:44 · 1606 阅读 · 0 评论 -
new和delete六问
问题1:new一个对象后面加与不加()的区别是什么对于有自己写构造函数的类,不论类型名后面有没有括号,都用构造函数进行初始化;如果没有构造函数,则不加括号的new只分配内存空间,不进行内存的初始化,而加了括号的new会在分配内存的同时初始化为0。问题2:new的用法格式是什么1.开辟单变量地址空间一般使用格式:格式1:指针变量名=new 类型标识符;格式2:指针变量名=new 类型标识符(初始值);格式3:指针变量名=new 类型标识符 [内存单元个数];格式1和格式2都是申请分配某原创 2020-08-26 21:59:03 · 159 阅读 · 0 评论 -
理解二级指针
一、明确概念对于一个普通变量,进行引用操作,得到的是一级指针。如int a=0;int p=&a,则&a就是一级指针。因为&a的值就是a的地址,p的值也是a的地址,则&a和p就是一级指针变量(简略为指针),对&a进行解引用操作,int b=&a;这b等于0.对于普通变量作为形参传递到函数内部,参数的值传递就意味着只是简单的将变量的值copy了一份到临时变量中,然后将临时变量传递给函数,然而临时变量和原始变量是没有任何关系,则函数是无法改变外部原始变转载 2020-08-26 15:48:39 · 540 阅读 · 0 评论 -
《C和指针》第十章-结构和联合 学习笔记
一、 结构体的声明和创建1.下面这个声明创建了一个名叫x的变量,它包含三个成员:一个整数、一个字符和一个浮点数。struct { int a; char b; float c;} x;2.这个声明创建了y和z。y是一个数组,它包含了20个结构。z是一个指针,它指向这个类型的结构。struct { int a; char b; float c;} y[20] , *z;3.这个声明把标签SIMPLE和这个成员列表联系在一起。该声明并没有提供变量列表,所以它并未创建任何变量。st原创 2020-08-24 21:28:24 · 195 阅读 · 0 评论 -
《C和指针》第6章-指针学习笔记
内存中的每个位置由一个独一无二的地址标识,内存中的每个位置都包含一个值高级语言通过名字而不是地址来访问内存的位置,名字与内存位置之间的关联并不是硬件所提供的,它是由编译器为我们实现的,硬件仍然通过地址访问内存位置指针存储的是其指向的地址,通过间接访问操作符*才能得到其指向地址中的内容int a = 112,b = -1;float c = 3.14;int *d = &a;float *e = &c;表达式右值类型a112intb-1i.原创 2020-08-08 22:41:15 · 127 阅读 · 0 评论 -
左值和右值
1.什么是左值左值就是那些能够出现在赋值符号左边的东西。2.什么是右值右值就是那些可以出现在赋值符号右边的东西。例如:a =b + 25;b +25 = a;//非法第一条语句中:a是左值,b+25是右值第二条语句中:a此时也可以当作右值,而b+25不能作为左值,因为它并未标识一个特定的位置int a[30];...a[b + 10] = 0;表达式的左边是个表达式,它是个合法的左值int a , *pi;...pi = &a;*pi = 20;第2原创 2020-08-08 16:33:32 · 151 阅读 · 0 评论 -
const修饰成员函数
常成员函数1、 const修饰函数的意义承诺在本函数内部不会修改类内的数据成员,不会调用其它非const成员函数。函数能访问const数据成员和非const数据成员,但不能修改非const数据成员加了const的成员函数可以被非const对象和const对象调用 ,但不加const的成员函数只能被非const对象调用2、const修饰函数位置const修饰函数时放在:声明之后,实现体之前。可能是因为也没有其他地方可以放了。...原创 2020-08-01 20:23:28 · 196 阅读 · 0 评论 -
C++中new的用法
1.开辟单变量地址空间例如:int *p = new intint *p = new int(1)开辟大小为sizeof(int)的内存空间,并初始化为1,指针p指向该内存空间2.开辟数组空间例如:int *p = new int[5] {1}开辟一个大小为5的整型数组空间,并初始化为1,指针p指向数组首地址二维:int (*p)[5] = new int[3][5]3.new一个...原创 2019-11-13 10:21:43 · 784 阅读 · 0 评论