
C/C++
~Ran~
这个作者很懒,什么都没留下…
展开
-
[C]转义字符的探究
转义字符顾名思义就是转变意思的字符有这样一组代码printf("%lu\n", strlen("\377")); // 1printf("%lu\n", strlen("\378")); // 2printf("%lu\n", strlen("\387")); // 3printf("%lu\n", strlen("\0377")); // 2printf("%lu\n", st...原创 2019-05-20 23:06:37 · 472 阅读 · 0 评论 -
[C/C++]内存管理
目录初始化变量C/C++程序的内存开辟1.栈2.堆3.数据段(静态区)4.代码段函数的入口校验动态内存函数1.malloc2.free3.calloc4.realloc初始化变量在定义一个变量时,第一件事就是初始化,但是往往这个时候我们还不确定这个变量的初值,这样的话可以初始化为0或NULL,用完指针之后也将指针变量的值设置为NULL。如果定义的是数组的话,可以这样初始化:int a[10]...原创 2019-07-03 12:06:17 · 172 阅读 · 0 评论 -
[C]函数指针
目录定义调用的方式两段有意思的代码应用场景1. 回调函数:2. 表驱动(转移表):定义函数指针就是指向函数的指针,其值就是函数体的首地址。在底层,函数名就代表函数的首地址,所以把函数名直接指派给一个同类型的函数指针而不需要&运算符,可以直接用函数名注册回调函数。int(*fp)(const char *)=strlen;调用的方式有两种:int len = fp("hehe"...原创 2019-06-28 18:30:01 · 308 阅读 · 0 评论 -
[C]指针与数组相关面试题
前几篇博客提到了指针和数组的本质,所以这篇博客讨论有关面试题,其中有些是必须掌握的知识,有些是面试常考,还有些纯属好玩~~目录数组面试题关于二维数组的详细理解总结指针面试题总结数组面试题//对于整数char c = 1;printf("%d\n", sizeof(c)); // 1,c为char类型,一个字节printf("%d\n", sizeof(c + 0)); // 4...原创 2019-06-30 18:06:01 · 294 阅读 · 0 评论 -
[C]文件基本操作总结
目录文件的打开和关闭fopenfclose文件的顺序读写文件的随机读写fseekftellrewind文件结束判定文件出错判定文件缓冲区字符串和数字之间的转换方式一般我们说的文件有两种:程序文件:源程序文件(后缀为.c);目标文件(windows环境后缀为.obj);可执行程序(windows环境后缀为.exe)数据文件:文本文件=>以ASCII字符的形式存储的文件二进制文件=&...原创 2019-07-07 00:00:01 · 360 阅读 · 0 评论 -
[C]自定义类型总结
目录内存对齐内存对齐的意义修改默认对齐数位段位段的跨平台问题柔性数组柔性数组的特点枚举联合(共用体)一个有趣的问题内存对齐第一个成员在与结构体变量偏移量为0的地址处。其他成员变量要对齐到某个数字(对齐数)的整数倍的地址处。对齐数=编译器默认的一个对齐数与该成员大小的较小值。 VS中默认的值为8,Linux中的默认值为4结构体总大小为最大对齐数(每个成员变量都有一个对齐数)的整数倍。如果...原创 2019-07-06 00:33:06 · 473 阅读 · 0 评论 -
[C]预处理和宏定义总结
目录C预处理预定义宏#define参数化的宏#与##宏和函数命令行定义C预处理C预处理器不是编译器的组成部分,它是编译过程中一个单独的步骤。本质上是一个文本替换工具所有预处理器命令都是#开头,预处理指令不是语句,所以它们不会以分号结尾。预处理:选项 gcc -E test.c -o test.i 预处理完成之后就停下来,预处理之后产生的结果都放在test.i文件中。常见指令:#defi...原创 2019-07-16 18:03:01 · 234 阅读 · 0 评论 -
[C++]函数总结
目录内联函数引用变量临时变量C++11 右值引用引用和指针默认参数函数重载注意事项重载引用/指针参数原理内联函数编译时,编译器会在调用内联函数的地方展开,没有函数压栈的开销,内联函数提升程序运行的效率,但是占用更多内存。当执行函数代码时间比处理函数调用机制时间长时,则节省的时间比例不高,不必声明为内联。当函数代码少,并且函数经常被调用,声明为内联可以提升程序运行效率。inline对于编译...原创 2019-08-03 18:03:17 · 439 阅读 · 0 评论 -
[C++]名称空间
目录传统C++名称空间声明区域:潜在作用域和作用域:新的名称空间特性定义使用最佳实践C++中,名称可以是变量、函数、结构、枚举、类、以及类和结构的成员。使用名称空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染。传统C++名称空间声明区域:声明区域是可以在其中进行声明的区域。例如,全局变量的声明区域为其声明所在的文件;自动变量的声明区域为其声明所在的代码块。潜在作用域和作用域...原创 2019-08-01 12:06:01 · 428 阅读 · 0 评论 -
[C++]模板总结
目录定义实例化非类型模板参数模板参数的匹配原则函数模板特化类模板类模板特化类型萃取模板分离编译总结定义template开始,后跟一个模板参数列表(在模板定义中,模板参数列表不能为空)typename是用来定义模板参数关键字(C++98之后),也可以 使用class(切记:不能使用struct代替class)实例化隐式实例化:让编译器根据实参推演模板参数的实际类型,编译器一般不会进行类型转...原创 2019-08-13 13:16:30 · 338 阅读 · 0 评论 -
[C++]类和对象总结
目录定义方式类的访问限定符及封装类对象模型构造函数使用构造函数默认构造函数初始化列表C++11 成员初始化新玩法单参构造拷贝构造函数析构函数运算符重载this指针对象数组C++11 列表初始化const成员函数static成员友元友元函数友元类内部类C语言中结构体中只能定义变量,C++中结构体内不仅可以定义变量,也可以定义函数,C++中更喜欢用class来代替。区别是struct的成员默认访问方...原创 2019-08-08 23:13:01 · 481 阅读 · 0 评论 -
[C++]继承总结
目录继承方式基类和派生类对象赋值转换继承中的作用域派生类的默认成员函数C++11: final继承与友元、静态虚拟继承继承继承与组合继承机制是代码复用重要的手段,允许在保持原有类特性的基础上进行扩展,产生子类继承方式public继承:继承父类中的public和protected成员,访问限定符不变private继承:继承父类中的public和protected成员,访问限定符变为priva...原创 2019-09-03 23:00:17 · 289 阅读 · 0 评论 -
[C++]多态总结
目录多态的定义多态的构成条件虚函数的重写C++11: override和final抽象类多态的原理虚函数表多继承中的虚函数表为什么达到多态必须父类对象的指针或引用调用虚函数打印虚函数表多继承子类虚函数表访问方法多态的定义多态的构成条件必须通过父类的指针或者引用调用虚函数被调用的函数必须是虚函数,且子类必须对父类的虚函数进行重写虚函数的重写子类中有一个跟父类完全相同的虚函数(返回值类...原创 2019-09-08 23:38:31 · 192 阅读 · 0 评论 -
[C++]智能指针
目录new/delete操作符定位new表达式设计一个只能在堆上创建对象的类设计一个只能在栈上创建对象的类关于内存泄漏new/delete操作符操作:new data-type;data-type可以是包括数组在内的任意内置类型数据,也可以是自定义的任何数据类型如:int* p = new int(3); delete p;在堆上申请空间,创建对象int并初始化为3int* p = n...原创 2019-09-13 23:17:36 · 245 阅读 · 0 评论 -
[C]浮点数详解
IEEE 754规定任意一个二进制浮点数V可以表示成下面的形式:V=(−1)S×M×2EV=(-1)^S × M × 2^EV=(−1)S×M×2E例如下图是32位单精度浮点数存储模型其中S表示符号位,当S=0,V为正数;当S=1,V为负数。M表示有效数字,1≤M<2(规约形式)E表示指数位。eg:十进制的6.125,用拈加法写成二进制是110.001,等价于1.10001...原创 2019-05-21 13:33:33 · 2298 阅读 · 0 评论 -
[C]位运算技巧以及常见题型总结
目录1. 给定一个数,将某一位设置为1或者02. 给定一个整数num,求这个整数中二进制位1的个数3. 利用异或操作实现交换变量a、b4. 使用位运算求(a + b) / 25. 一组数据中只有一个数字出现了一次,其他所有数字都是成对出现的。请找出这个数字(使用位运算)6. 一个数组中只有两个数字是出现一次,其他所有数字都出现了两次。找出这两个数字(使用位运算)1. 给定一个数,将某一位设置为1...原创 2019-05-25 23:03:21 · 879 阅读 · 0 评论 -
[C]类型提升详解
整型提升表达式的运算要在CPU内执行,CPU内整型运算器的操作数的字节长度一般是int的字节长度,同时也是CPU的通用寄存器的长度。因此,即使两个char类型的相加,在CPU执行时也要先转换为CPU内整型操作数的标准长度。通用CPU是难以直接实现两个8比特字节直接相加运算所以,表达式中各种长度可能小于int长度的整型值,都必须先转换为int或unsigned int,然后才能送入CPU去执行运算...原创 2019-05-22 15:03:00 · 1847 阅读 · 0 评论 -
[C]大小端存储模式判断方法
大端存储模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中;小端存储模式,是指数据的低位保存在内存的低地址中,而数据的高位,保存在内存的高地址中。我们常用的X86结构是小端模式,而KEIL C51则为大端模式。很多的ARM,DSP都为小端模式。有些ARM处理器还可以由硬件来选择是大端模式还是小端模式。如何判断// 方法一int IsLittleEnd1() {...原创 2019-05-26 23:38:18 · 277 阅读 · 0 评论 -
[C]数组深入探究
目录数组的本质数组名数组初始化关于下标越界二维数组多维数组数组和指针之间的等价关系数组传递数组的动态创建数组的本质任何数组的元素在内存中都是连续字节存放的,数组下标必须是整数或整数表达式,并且下标操作符返回的是一个元素的引用:int arr[10] = { 0 };arr[3] = 1; // 编译器计算地址arr+3*sizeof(int),并且返回该地址的引用,和下边两句是语义上等价...原创 2019-06-02 12:33:00 · 186 阅读 · 0 评论 -
[C]指针的艺术
指针是C语言的精髓,正是指针使C威力无穷,下面是我学习过程中总结的一些指针相关内容,持续更新中;目录指针的本质定义指针类型的注意事项指针有实际意义的运算字符指针的误区指针的本质可执行程序是由指令、数据和地址组成的。当CPU访问内存单元时,必须把内存单元的地址加载到地址总线上,同时将内存电路的“读写控制”设置为有效,然后内存单元中的数据就通过数据总线流向了接受寄存器中,或者结果寄存器中的值流向...原创 2019-06-18 12:38:37 · 345 阅读 · 0 评论 -
[C]字符函数和字符串函数
如果要更好的运用C语言中的一些库函数,那么模拟它的实现过程是必不可少的,在此我总结一些常用的库函数的模拟实现:目录字符串相关函数1.模拟实现strlen函数2.模拟实现strcpy函数3.模拟实现strcat函数4.模拟实现strcmp函数字符串查找函数1.模拟实现strstr函数2.模拟实现strtok函数内存操作函数1.模拟实现memcpy函数2.模拟实现memmove函数字符串相关函数...原创 2019-07-01 23:00:00 · 151 阅读 · 0 评论 -
[C++]C++11零碎特性总结
auto关键字C++11中,auto全新的含义:auto不再是一个存储类型指示符,而是作为一个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得。使用auto时必须进行初始化,编译阶段需根据初始化表达式来推导auto的实际类型auto是一个类型声明时的“占位符”,编译器在编译期会将auto替换为变量实际的类型用auto声明指针类型时,用auto和auto*没有任...原创 2019-09-18 13:07:30 · 301 阅读 · 0 评论