一、c语言
1.1 main函数
int argc char*argv[]
argc :表示输入有几个参数
argv[]是输入参数的数组
argv[0]:指向程序运行的全路径名
argv[1]指向输入的第二个字符
带参数的main可以使得我们的程序灵活度大大提高
1.2 if else
记住else是就近匹配的
1.3 switch、break
在switch语句中要是不出现break,就会一直往下面执行,一直没的执行才会退出
1.4 for、while、do-while
没看懂
1.5 枚举
enum DAY{MON=1,TUE,WED,THU,FRI}day;
枚举数组中第一个数据默认是1,后面比前一个大1
1.6 结构体与共有体
结构体:
struct Books{
char title[50];
char author[50];
char subject[100];
int book_id;
} book;
共有体
union Data{
int i;
float f;
char str[20];
};
共用体一种特殊的数据结构,允许相同的内存位置存储不同的数据类型 ,成员变量的首地址相同共享内存空间,最大成员空间就是整个共用体的内存空间,但这样空间内容会被不停的覆盖,所有一次只能操作一个变量
1.7 函数传参
1.8 全局变量与静态变量
1、局部变量和全局变量可以相同,但是在函数中局部变量会覆盖全局变量的值
2、全局变量在整个工程文件中有效,静态全局变量只是在.c中有效
1.9 数据类型
整型数据的存储涉及到原码、反码、补码的概念。数值在计算机的存储里,最左边的一位代表符号位,0代表正数,1代表负数
原码:为二进制的数,10的原码是0000 1010
反码: 正数的反码与原码相同,负数的反码是0变1,1变0
-10 的原码是 1000 1010 反码是 1111 0101
补码:正数的补码与原码相同:如 10 原码为 0000 1010 补码 0000 1010
负数的补码为反码 +1 如 -10 反码是 1111 0101 补码是 1111 0110
在windows 32 与window 64 中 各种数据类型大小都是一样的但是指针数据类型不同
32
64
1.10 类型转换
记不住
1.11 优先级
记不住’
1.12 位运算
~ 取反
^ 异或 两个数据位不同就是1,相同就是0
1.14 数组指针和指针数组
数组指针本质就是一个指针,设有定义int (*p)[n]
;且()
优先级高,可以说明p
是一个指针,且指向一个整形的一维数组
指针数组本质就是数组,假设有定义int *p[n]
;且[]
优先级高,可以理解为先与p结合成为一个数组
1.15 指针与字符串
字符串后面有个/0
字符串其实就是一个指向其首字符的指针
1.16 指针与函数
函数指针就是指向函数的指针变量,每一个函数都有一个入口地址,该地址就是函数指针所指向的地址
int (*f)(int a)
函数指针的应用场景是回调,别人的库调用我们的函数
指针函数 本质就是函数,返回值是指针
int *f(x,y);
1.17 指针与结构体
结构体指针强制类型转换的巧妙应用
将指针强制转换成结构体类型,数组的值就会赋给结构体成员变量
1.18 内存布局
没看懂
1.19 野指针与内存泄漏
野指针:指向一段未知空间
1、指针变量未被初始化
2、指针指向的地址空间已经被free或delete
3、指针操作超越了作用域
4、使用智能指针
内存泄漏:申请一段空间后,使用完毕没有释放
1、new和malloc申请资源使用后,没有用delete和free释放;
2、子类继承父类时,父类析构函数不是虚函数。
1.20 野指针与内存申请
1.21 内存碎片
内部碎片是由于采用固定大小的内存分区,当一个进程不能完全使用分给它的固定内存区域时就产生了内部碎片,通常内部碎片难以完全避免(多了)
外部碎片是由于某些未分配的连续内存区域太小,以至于不能满足任意进程的内存分配请求,从而不能被进程利用的内存区域。再比如堆内存的频繁申请释放,也容易产生外部碎片(不够)