C++
仅供个人使用 便于知识梳理
1.头文件
h文件:可被外部调用的函数,变量的声明
c文件:函数,变量的定义
注意:
- 函数在调用前必须有定义或声明
- 使用的自定义函数的.c文件必须添加到工程参加编译
- 使用到的.h文件必须要放在编译器可寻找到的地方(工程文件夹根目录.安装目录,自定义
预编译:C语言的预编译以#开头,作用是在真正编译开始之前,对代码做一些处理(预编译)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vgttNgHx-1686493523016)(C:\Users\xiaoxin\AppData\Roaming\Typora\typora-user-images\1678076127885.png)]
#ifndef AAA //如果没有定义AAA,则下面参与编译 防止定义重复使用
#define AAA//定义AAA
#endif
2.静态变量
- 局部静态变量
普通局部变量是再熟悉不过的变量了,在任何一个函数内部定义的变量(不加static修饰符)都属于这个范畴。编译器一般不对普通局部变量进行初始化,也就是说它的值在初始时是不确定的,除非对其显式赋值。(普通局部变量存储于进程栈空间,使用完毕会立即释放。)
静态局部变量使用static修饰符定义,即使在声明时未赋初值,编译器也会把它初始化为0。且静态局部变量存储于进程的全局数据区,即使函数返回,它的值也会保持不变。(变量在全局数据区分配内存空间;编译器自动对其初始化。其作用域为局部作用域,当定义它的函数结束时,其作用域随之结束
- 全局静态变量
全局变量定义在函数体外部,在全局数据区分配存储空间,且编译器会自动对其初始化。普通全局变量对整个工程可见,其他文件可以使用extern外部声明后直接使用。也就是说其他文件不能再定义一个与其相同名字的变量了(否则编译器会认为它们是同一个变量)
- extern声明外部结构体
结构体是一种类型,定义一种类型最好是在.h文件定义,这样其他地方想用这个结构体,只需包含此.h文件即可,但是定义结构体变量的话,最好载.c文件定义(为了防止重复定义,所以不建议在.h文件中定义变量),然后.h里面extern声明,其他.c文件想用只需包含那个属.h文件即可
3.补码和原码
3.1 正数和负数
1、正数5的表示法
假设有一个 int 类型的数,值为5,那么,我们知道它在计算机中表示为:
00000000 00000000 00000000 00000101
5转换成二制是101,不过int类型的数占用4字节(32位),所以前面填了一堆0。
2、负数-5的表示法
现在想知道,-5在计算机中如何表示?在计算机中,负数以原码的补码形式表达
10000000 00000000 00000000 00000101
3.2原码
一个正数,按照绝对值大小转换成的二进制数;一个负数按照绝对值大小转换成的二进制数,然后最高位补1,称为原码
3.3反码
正数的反码与原码相同,负数的反码为对该数的原码除符号位外各位取反[每一位取反(除符号位)]。
正数00000000 00000000 00000000 00000101 的反码还是 00000000 00000000 00000000 00000101
负数10000000 00000000 00000000 00000101 的反码则是 11111111 11111111 11111111 11111010
00000000 00000000 00000101 的反码则是 11111111 11111111 11111111 11111010