C++知识点打结(二)
作者:互联网
C++知识点打结(二)
11. 多继承
含有纯虚函数的类是抽象类,不能实例化。
在多继承中,派生类和被继承的第一个基类的地址相同,和第二个基类的地址不同
12. 内存分配
-
栈:就是那些由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储区。里面的变量通常是局部变量、函数参数等。
-
堆:就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete。如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收。
-
自由存储区:就是那些由malloc等分配的内存块,他和堆是十分相似的,不过它是用free来结束自己的生命的。
-
全局存储区(静态存储区):全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。程序结束后有系统释放。
-
常量存储区:这是一块比较特殊的存储区,他们里面存放的是常量,不允许修改。
13. 枚举
enum color {red,yellow=2,blue,white,black}
如果yellow不赋值为2,则red应为0,后面的元素值依次递加,依次为 0 1 2 3 4,但是现在yellow=2,故red=0,yellow后元素依次在2的基础上递加,结果为 0 2 3 4 5
14. fopen
fopen存在下面几种模式:
- r以只读方式打开文件,该文件必须存在。
- r+以读/写方式打开文件,该文件必须存在。rb+以读/写方式打开一个二进制文件,只允许读/写数据。
- rt+以读/写方式打开一个文本文件,允许读和写。
- w打开只写文件,若文件存在则长度清为 0,即该文件内容消失,若不存在则创建该文件。w+打开可读/写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
- a以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留(EOF 符保留)。
- a+以附加方式打开可读/写的文件。若文件不存在,则会建立该文件,如果文件存在,则写入的数据会被加到文件尾后,即文件原先的内容会被保留(原来的 EOF 符不保留)。
- wb以只写方式打开或新建一个二进制文件,只允许写数据。
- wb+以读/写方式打开或建立一个二进制文件,允许读和写。
- wt+以读/写方式打开或建立一个文本文件,允许读写。
- at+以读/写方式打开一个文本文件,允许读或在文本末追加数据。
- ab+以读/写方式打开一个二进制文件,允许读或在文件末追加数据。
15. 32位机器输出
32位机器上,以下代码的输出是
char c = -1;
int i0 = c;
int i1 = (unsigned char)c;
printf("%d, %d\n", i0, i1);
char类型有符号,所以-1可以表示,uchar类型无符号(范围是0-255),-1是1000 0001,转换成补码是1111 1111,uchar无符号位,所以最高位的1也计算到值里,为1+2+4+…+128=255
16. 转义字符
转移字符以\或者\x开头,以\开头(\ddd)表示八进制,以\x开头(\xdd)表示十六进制。(d表示数字)
\0oo: 八进制值(oo必须是有效的八进制数,即每个o可表示0~7中的一个数)
\xhh: 十六进制值(hh必须是有效的十六进制数,即每个h可表示0~f中的一个数)
转义字符以\开始,如果是\x(注意是小写,C语言是区分大小写的)开头,后面接16进制数,如果以\开头,后面接八进制数。
转移字符表示的数据范围有限,因此对\x开头的 ,只能是\xxx(后面两位表数据)这种格式的,意思是只能接两位数据,最大值为\x7f
对\开头的,后面可以接三位数据,即\xxx(后三位均为数),最大值为\177
17. 预算符优先级
运算符优先级:!> 算术运算符 > 关系运算符 > (&& ||)> 条件运算符> 赋值运算符 > 逗号运算符
18. Const
const在的左边,则指针指向的变量的值不可直接通过指针改变(可以通过其他途径改变);在的右边,则指针的指向不可变。简记为"左定值,右定向"。
19. 预处理
#define 定义一个预处理宏
#undef 取消宏的定义
#if 编译预处理中的条件命令,相当于C语法中的if语句
#ifdef 判断某个宏是否被定义,若已定义,执行随后的语句
#ifndef 与#ifdef相反,判断某个宏是否未被定义
#elif 若#if, #ifdef, #ifndef或前面的#elif条件不满足,则执行#elif之后的语句,相当于C语法中的else-if(扩展条件)
#else 与#if, #ifdef, #ifndef对应, 若这些条件不满足,则执行#else之后的语句,相当于C语法中的else(扩展条件)
#endif #if, #ifdef, #ifndef这些条件命令的结束标志.
defined 与#if, #elif配合使用,判断某个宏是否被定义
20. Fork进程拷贝
for (int i = 0; i < 2; i++)
{
fork();
print("-\n");
}
会打印6个“-”。
fork()函数是通过系统调用实现进程的拷贝。
标签:知识点,存储,文件,打结,C++,运算符,以读,ifdef,打开 来源: https://blog.csdn.net/moneymyone/article/details/118438674