知识总结 - C/C++
暴打章鱼哥
不要让自己被世俗影响,学习编程,必先专精一门,再善其道!
展开
-
C++ 转-动态内存管理(new和malloc)
作者:天天劈柴来源:CSDN原文:https://blog.csdn.net/zym1348010959/article/details/81141394版权声明:本文为博主原创文章,转载请附上博文链接!在C语言中,用malloc/calloc/realloc/free来进行动态内存管理。这三者都是在堆上对空间进行开辟,free将申请到的空间释放掉。malloc只有一个参数,就是需...转载 2019-07-03 12:51:14 · 215 阅读 · 0 评论 -
C语言 位运算
计算机的变量是如何存储在内存里的?本文例子复制自文章:https://blog.csdn.net/mengzhengjie/article/details/80611422首先如果你定义了一个变量并赋值了一个变量aint a=20;它在内存中的存储形式是以二进制的形式来存储的,那么它的值是10100.(正数是以二进制的形式存储,负数是以二进制补码的形式存储)关于二进制与十进制的转换...原创 2019-06-27 20:09:39 · 413 阅读 · 0 评论 -
C语言 位字段
位字段的作用:用于限定结构体某个变量使用固定的二进制位。例子:struct date{ unsigned int day : 5; unsigned int month : 4;}原创 2019-06-27 20:18:59 · 268 阅读 · 0 评论 -
C语言 常用文件IO函数
C语言文件类型指针:FILE* 指针名;打开文件:FILE *fopen(char *filename, char *mode);filename为文件名,mode为打开方式fopen常用打开方式:打开方式说明r读(文本文件)w写(文本文件)会新建一个文本文件,文件名存在则将被删除后创建。a打开一个文件文件,不存在而新建,存在则在文件末尾追写(不...原创 2019-06-27 22:36:54 · 1020 阅读 · 0 评论 -
C++ 类的静态成员以及静态成员函数
关键字static可以用于说明一个类的成员或函数,当把一个类的成员说明为static时,无论这个类创建了多少对象,这些对象都共享这个static成员。静态成员与静态成员函数都属于整个类,并不属于对象的。调用静态成员(变量/函数)类名::成员();静态成员函数不能直接调用非静态成员:以下文字与理解摘自 来自:https://www.cnblogs.com/MATU/p/3818163...原创 2019-07-03 18:43:14 · 99 阅读 · 0 评论 -
C++ 类中的this指针
在类函数中,可以用this表示当前对象。例如:class test{ public: test(int a,int b){ this->a=a;//this->a表示的是private中的a this->b=b; } private: int a; int b;}但要注意的是,在全局函数、静态函数中无法使用this,只有在静态函数中使用...原创 2019-07-03 19:40:28 · 351 阅读 · 0 评论 -
C++ 友元函数与友元类
友元函数:友元函数,顾名思义,你可以把它理解为友军或者朋友。使用关键字 friend 在类的内部定义一个函数,那么这个函数就是这个类的友军。但是友元函数并不是这个类的成员函数。这个函数可以在这个类的外部访问这个类的任何成员(有权访问类的所有private成员和protected成员)示例(来自 :https://www.runoob.com/cplusplus/cpp-friend-fun...原创 2019-07-03 19:58:18 · 98 阅读 · 0 评论 -
C++ 重载运算符
C++ 允许在同一作用域中的某个函数和运算符指定多个定义,分别称为函数重载和运算符重载。运算符重载我们可以理解成把 某个运算符,例如 + ,给重新定义。格式:返回值 operator重载的运算符(参数列表);重点:在重载运算符的函数中,运算符左边的对象为this对象,运算符右边的对象为参数列表中的参数另外每个参数要用const修饰例如:Box operator+(const Box&...原创 2019-07-03 20:36:53 · 130 阅读 · 0 评论 -
C++ 类的继承
类与类之间可以通过继承,来继承父类的所有成员与函数(但有权限限制)。下列特殊函数除外:基类的构造函数、析构函数和拷贝构造函数。基类的重载运算符。基类的友元函数。格式:class 派生类:访问操作符 基类名,访问操作符 基类.....{ //代码区}访问操作符:public:父类成员在子类保持原有访问级别private:父类成员在子类变为private成员protecte...原创 2019-07-03 20:58:37 · 213 阅读 · 0 评论 -
C++ 多态、多态原理以及纯虚函数与抽象类(新手向)
C++的多态分为 : 静态多态与动态多态静态多态是在编译器编译的时候就设置好了的,例如函数重载就是静态多态,编译器在编译期间根据函数的参数来选择适合的函数。动态多态是在编译器运行的时候,在基类与子类有同名函数的情况下,根据接收的对象从而调用接收对象的同名函数。另外要记得:根据赋值兼容性原则,子类的对象可以赋值给父类指针。(我之前被多态搞晕就是因为忘记把这个原则带入进去,个人以为多态就是基...原创 2019-07-04 13:23:52 · 147 阅读 · 0 评论 -
C语言 利用setvbuf来设置缓冲区的模式
setvbuf主要用于优化内存提高系统效率。int setvbuf(FILE *stream, char *buffer, int mode, size_t size) stream – 这是指向 FILE 对象的指针,该 FILE 对象标识了一个打开的流。buffer – 这是分配给用户的缓冲。如果设置为 NULL,该函数会自动分配一个指定大小的缓冲。mode – 这指定了文件缓冲的模...原创 2019-06-30 00:06:12 · 881 阅读 · 0 评论 -
C语言 auto,static,extern,register类型的区别
auto自动变量:一般情况下,C语言默认所定义的变量都是自动变量。int a;编译器会自动解析为:auto int a;不仅仅变量,还包括数组,结构体,指针,共用体。register寄存器变量:寄存器在cpu内部,运算速度非常快,内存的数据必须载入寄存器才能运算,所以频繁使用的变量放在寄存器可以提高效率。寄存器说明符只能用于函数中的变量和函数中的形参,全局变量与静态变量不能使用。另...原创 2019-06-30 00:58:21 · 1139 阅读 · 0 评论 -
转 -内存的四个区域
内存四个区域的介绍与使用方法一:代码区 code 程序被操作系统加载到内存时,所有可执行的代码被加载到代码区,也叫代码段, 程序运行这段时间该区域数据不可被修改只可以被执行。二:静态区 程序被加载到内存时就已经分配好,程序退出时才从内存中消失。 存储静态变量和全局变量。代码执行期间一直占用内存!...转载 2019-06-30 19:46:33 · 314 阅读 · 0 评论 -
C语言 编译与预处理
C语言从源代码到执行程序要经过这几个步骤:源代码 ->预处理->编译->汇编->链接预处理:预处理包含:宏定义、文件包含、条件编译预编译是对一些带#伪指令执行的操作,例如 #define ,会预先把define定义的字符替换掉。编译:主要是检查一些错误,并报错,还会对代码进行优化,为全局变量与静态变量分配内存,翻译成机机器码。链接:将系统的头文件或或自...原创 2019-06-30 20:06:14 · 140 阅读 · 0 评论 -
C语言 静态断言以及自定义静态断言
静态断言可以在编译时就对程序的错误做出判断,而普通断言只能在程序运行出现错误的时候做出退出并产生调试信息 - 红黑联盟可以使用NDEBUG来关闭静态断言:#define NDEBUG //关闭静态断言使用静态断言首先引用头文件:#include <assert.h> 静态断言函数原型:void assert(int expression);...原创 2019-06-30 20:19:47 · 721 阅读 · 0 评论 -
C语言 预处理命令
预处理包含:宏定义、文件包含、条件编译预处理命令以#开头,每句最好独占一行,否则可能会出错。宏定义命令:#define 标识符 被标识符替换的字符串例:#define m 100限制#define的作用域:#define 的作用域是他所在的源文件。我们可以用#undef限制#define的作用域#define m 100printf("%d",m);#undef m带...原创 2019-06-30 20:52:15 · 192 阅读 · 0 评论 -
C++ explicit关键字
转自 https://blog.csdn.net/qq_37233607/article/details/79051075explicit是个C++关键字,但是关注过它的人远远没有其他关键字的多,但是往往忽略了它,就会在一些不经意的地方造成错误,而花费更多的时间去寻找.看下下面这个例子:#include <iostream>using namespace std;class...转载 2019-07-15 16:35:31 · 99 阅读 · 0 评论 -
C++ 拷贝构造函数
基本类型赋值的时候很简单,直接使用 = 即可,例如int a = 10;int b = 10;但是类不一样,类里面包含着许多的成员,不能像基本类型一样赋值。例如:class test{ test(int x.int t){ a = x; b = t; } public: int a = 0; int b = 2;}如果我直接test t1(5,2);...原创 2019-07-03 12:41:26 · 87 阅读 · 0 评论 -
C++ 类的构造函数与析构函数
构造函数与析构函数的区别:构造函数在类初始化的时候执行,析构函数在类的代码结束的时候执行。构造函数主要用于初始化数据,分配空间,析构函数主要用于释放空间。构造函数的函数名与类名一样,可以重载,但没有返回值。如:class A{ public: A(){ a=10; } int a=0;}析构函数的函数名为~类名,可以重载,没有返回值。class A{ pu...原创 2019-07-02 22:27:08 · 138 阅读 · 1 评论 -
C语言 使用stdarg.h实现函数可变参数
本文有部分的理解借鉴于https://blog.csdn.net/u012005313/article/details/52122077该文比较基础,适合新手,如需进阶请看上面的文章。本文只是自己的理解,如果有错误的地方评论区请指出,谢谢。首先引入头文件:#include<stdarg.h>需要可变的参数列表要用…来代替。例如: int add(int num, in...原创 2019-06-26 12:49:41 · 277 阅读 · 0 评论 -
C语言 函数指针的定义以及用法
定义格式:函数返回值类型 (*函数指针名) (参数列表);例:int (*p)(int, int);函数可以理解成一个首地址,所以我们可以直接赋值。int add(int a,int b){ .....}int (*p)(int, int) = add;...原创 2019-06-26 12:58:20 · 330 阅读 · 0 评论 -
C语言 指针的定义与理解
指针定义格式:类型 *指针名;例: int *p;指针一般用来存储内存地址,我们可以对内存地址的内容进行修改,这种方式叫直接访问。每个变量和函数都有他们对应的内存地址,只要变量跟函数没被释放,则一直存在。可以把指针理解成旅馆的门牌号,而指针指向的变量可以理解成旅馆的旅客。指针使用的目的是为了节省内存的空间。比如我要将一个int a[1024]的数组传递到函数B,如果函数B对数组a...原创 2019-06-26 13:39:23 · 206 阅读 · 0 评论 -
C语言 二级指针的定义与理解
二级指针定义格式:类型* 指针名;例:int *p;二级指针用于存储一级指针的内存地址。二级指针赋值实例:int *p = &a;int* *pp = &p;注意,只能同等类型赋值,不能不同类型赋值;例如char *p = &a;int* *pp = &p;因为int占4字节,char占1字节,两个数据类型所读取的长度不一样。指针以存...原创 2019-06-26 18:23:27 · 1785 阅读 · 0 评论 -
C语言 结构体的定义与理解
结构体是一种构造数据类型,可以理解成由不同类型的数据组成的一个自定义数据类型。结构体定义要在main的上方定义。结构体定义格式:struct 结构体名{//<-结构体名可以不写,不写则会成为无名结构体类型 成员名;类型 成员名;…}结构体变量1,结构体变量2,结构体变量3,…;例:struct nameinfo{ char name[50]; char phone[1...原创 2019-06-26 20:00:24 · 2415 阅读 · 0 评论 -
C语言 结构体数组与结构体指针
结构体数组的定义格式:struct 结构体名 结构体变量[元素大小];例:struct myinfo a[10];结构体指针的定义格式:struct 结构体名 *指针名;例:struct myinfo *p;结构体指针用于存储结构体变量的地址;例:struct myinfo a;struct myinfo *p = &a;如果结构体指针要去除对应的结构体变...原创 2019-06-26 20:10:16 · 565 阅读 · 0 评论 -
C语言 共用体/联合体的定义与理解
共用体,也叫联合体,使不同类型的变量共占一段内存的空间(相互覆盖)共用体的定义:union 共用体{};共用体的初始化与赋值方式与结构体相同。但任何时刻,共用体只有一个成员变量能够存在。共用体的大小一定要大于最大的那个成员变量的大小并且可以被最小的成员变量整除。...原创 2019-06-26 20:17:34 · 2264 阅读 · 0 评论 -
C语言 结构体字节对齐
本文部分文字复制自 :https://www.cnblogs.com/sunbines/p/9257981.html字节对齐的原因:1)平台原因(移植原因):不是所有的硬件平台都能访问任意地址上的任意数据,某些硬件平台只能在某些地址处取某些特定类型的数据,否则抛出硬件异常2)硬件原因:经过内存对齐之后,CPU的内存访问速度大大提升。使用伪指令#pragma pack (n),C编译器将按照...转载 2019-06-26 20:30:58 · 112 阅读 · 0 评论 -
C语言 枚举常量
枚举型是一个集合,集合中的元素(枚举成员)是一些命名的整型常量,元素之间用逗号,隔开。枚举常量的定义格式:enum 枚举名{枚举名 = 值,枚举名 = 值,枚举名 = 值…};也可以不赋值,他默认会从0开始递增enum 枚举名(枚举名,枚举名,枚举名,枚举名)枚举常量可以把他理解成#define每当定义一个枚举名 则 如同 #define 枚举名 值如果要从某个值开始递增,那么则...原创 2019-06-26 20:43:56 · 5154 阅读 · 0 评论 -
C++ 命名空间与std
如果你有一个函数名为 zyx ,你想引用的库里面也有一个函数名为 zyx , 那你可咋办。命名空间就是为此诞生的,如果你使用命名空间,你就可以同时使用自己的zxy函数与库里的zxy函数。命名空间(namespace)为防止名字冲突提供了更加可控的机制。C++命名空间的定义:namespace name{…}使用命名空间中的变量 :命名空间名::变量名;使用整个命名空间,这样在使用...原创 2019-07-02 20:06:22 · 436 阅读 · 0 评论 -
C++ 引用,以及引用与指针的区别
&在C++中不只是有取地址的意思,还有引用的意思。引用变量是一个别名,也就是说,它是某个已存在变量的另一个名字。一旦把引用初始化为某个变量,就可以使用该引用名称或变量名称来指向变量,其实可以把它想像成指针,但又区别于指针。引用示例:int& r = i;double& s = d;C++ 引用 与 指针 的区别引用很容易与指针混淆,它们之间有三个主要的不同...原创 2019-07-02 20:18:35 · 128 阅读 · 0 评论 -
C++ 内联函数
内联函数声明时的inline关键字必须与函数的定义在一起,否则会被编译器忽略。内联函数:inline int mufun(){ //代码区}内联函数和普通函数的区别在于:当编译器处理调用内联函数的语句时,不会将该语句编译成函数调用的指令,而是直接将整个函数体的代码插人调用语句处,就像整个函数体在调用处被重写了一遍一样。那么为什么要使用内联函数?函数调用在执行时,首先要在栈中为形参...原创 2019-07-02 20:32:08 · 113 阅读 · 0 评论 -
C++ 函数设置默认参数
C++可以设置函数声明时提供的一个默认值,在函数调用时没有指定这个函数的值,编译器会自动用默认值代替。示例:void myfun(int a, int b,int x = 3){ //代码区}值得注意的是 : 默认函数只能卸载参数列表的后面,如上示例。...原创 2019-07-02 20:38:16 · 1056 阅读 · 0 评论 -
C++ 函数重载的理解以及带参数的typedef
函数重载:即函数名称一样,但函数个数与类型不一样,参数顺序也不一样的不同函数彼此之间不冲突。函数的返回值不在函数重载的范围内。例:int xyz(int a,int n,int c){ //代码区}int xyz(int a,int n){ //代码区}int xyz(int a){ //代码区}int xyz(char *a){ //代码区}这几个函数其实是不冲...原创 2019-07-02 20:47:13 · 603 阅读 · 0 评论 -
C++ 类成员作用域
class 类名{ public://成员变量与函数可以在类的内部与外界访问与调用 protected://只能在类与他的派生类中有效 private://只能在类的内部调用}在struct定义的时候,所有成员属性默认为 public在class定义的时候,所有成员属性默认为 private另外类还可以做函数参数,不但可以使用其属性,还可以使用它的函数。...原创 2019-07-02 20:52:23 · 803 阅读 · 0 评论 -
C++ 函数模板与类模板
声明:本文大部分解释与理解来自:https://www.runoob.com/w3cnote/c-templates-detail.htmlhttps://www.cnblogs.com/gw811/archive/2012/10/25/2736224.html由菜鸟网整理总结,整理文章:https://www.cnblogs.com/gw811/archive/2012/10/25/2...原创 2019-07-07 10:51:33 · 140 阅读 · 0 评论