C和C++的区别
a. C是结构化的语言,面向过程,重点在于数据结构和算法
b. C语言的API比较简洁
c. C++包含了绝大部分C语言的功能,并且提供OOP(面向对象编程)和GP(类属编程)
d. C++有更严格的类型检查系统、大量额外的语言特性(RTTI,异常)
e. C++也比较简洁,有运算符重载,隐式转换,
f. C语言的struct不能声明函数,c语言没有模板,异常,继承C++中四个与类型转换相关的关键字,比较他们
a. /最常用的类型转换符,在正常状况下的类型转换/
static_cast(varible)/用于取出const属性,把const类型的指针变为非const类型的指针/
const_cast(varible)
c. /*dynamic_cast 主要用于执行“安全的向下转型,在程序运行期间判断\
但只在源类型具有多态类型时合法,即该类至少具有一个虚拟方法。*/
dynamic_cast(varible)RTTI
i. 通常用于向下转型,父类转换为子类(可以调用父类和子类共有的对象,调用子类独有的会错误),其中父类必须 要有虚函数(多态类型),否则错误
iv. /*interpret是解释的意思,reinterpret即为重新解释,此标识符的\
reinterpret_cast(varible)优先级队列,less greater
排序算法
a. 稳定的只有:插入,冒泡,归并(空间为O(N)),基数排序
b. 基数排序是先按个位排序,然后十位,依次到最高位时间复杂度和空间复杂度O(d(n+r)),d是基数,r是位数
c. 插入排序在最优的情况下只需O(n).
d. 快速排序的空间复杂度是O(logN),因为快速排序是需要返回一个结果值,需要O(logN)个结果值。大端和小端
a. Little-Endian
i. 对字节:低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。
ii. 对位域:按照结构体从上往下,分配到内存的从低到高
b. Big-Endian
i. 对字节:就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。
ii. 同小端相反
c. 比如0x1234,34是低位字节,12是高位字节位域
a. 一个位域必须存储在同一个字节中,不能跨两个字节,故位域的长度不能大于一个字节的长度
b. 位域的对齐- 如果相邻位域字段的类型相同,且其位宽之和小于类型的sizeof大小,则后面的字段将紧邻前一个字段存储,直到不能容纳为止;
- 如果相邻位域字段的类型相同,但其位宽之和大于类型的sizeof大小,则后面的字段将从新的存储单元开始,其偏移量为其类型大小的整数倍;
3.如果相邻的两个位域字段的类型不同,则各个编译器的具体实现有差异,VC6采取不压缩方式,GCC和Dev-C++都采用压缩方式; - 整个结构体的总大小为最宽基本类型成员大小的整数倍
如果位域字段之间穿插着非位域字段,则不进行压缩;(不针对所有的编译器)
int x = 1,int y = ~x;则 y 为 -2
在计算机中整数的真值用补码形式表示,正数的补码是它本身,负数的补码是原数值除符号位按位取反再加一,由补码求原数值也是按位取反再加一,那么1111 1110 除符号位按位取反再加一变成 1000 0010,即 -2。又如0x80000000代表最小的整数volatile关键字是一种类型修饰符
a. 用它声明的类型变量表示可以被某些编译器未知的因素更改。
b. 用volatile关键字声明的变量i每一次被访问时,执行部件都会从i相应的内存单元中取出i的值。
c. 没有用volatile关键字声明的变量i在被访问的时候可能直接从cpu的寄存器中取值(因为之前i被访问过,也就是说之前就从内存中取出i的值保存到某个寄存器中),之所以直接从寄存器中取值,而不去内存中取值,是因为编译器优化代码的结果(访问cpu寄存器比访问ram快的多)。
以上两种情况的区别在于被编译成汇编代码之后,两者是不一样的。之所以这样做是因为变量i可能会经常变化,保证对特殊地址的稳定访问。C++的深拷贝和浅拷贝
当在一个类中使用指针时,要特别注意拷贝构造函
C++学习笔记(更新中)
最新推荐文章于 2024-08-13 07:52:00 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)