1.static:有两个作用,规定作用域和存储方式,对于局部变量,static规定其为静态方式存储,每次调用的初始值为上一次调用的值,调用结束后存储空间不释放。 对与全局变量,如果以文件划分作用域的话,此变量只在当前文件可见,对于static函数也是在当前模块函数可见。
2.const:对于C/C++而言,const是只读的意思,只在声明中使用。const修饰的变量是只读的全局变量,他的值不可修改。
static const:规定既是只读的,又是只在当前模块中可见。
3.volatile:volatile是易变的,不稳定的意思,是一种类型修饰符,用它修饰的变量表示可以被某些编译器未知的因素改变,比如操作系统、硬件、或者其他线程。遇到这个关键字声明的变量时,编译器对访问该变量的代码不在进行优化,从而可以提供对特殊地址的稳定访问。 volatile关键字告诉编译器该变量是随时可变的,每次使用它的时候必须从内存中取出它的值,因而编译器生成的汇编代码会从原内存地址取出它的值。
简单来说,就是你定义的变量在程序运行过程中一直在变,你希望这个值被正确的处理,你就不得不每次从内存中读取这个值,这样就不会有错误了。
4.Int型变量移位操作:int a 把a的把第三位 置零? a &= ~( 1 << 2 )
解释:把1 左移两位,就只有第三位是1,其它位为0,然后再取反,就只有第三位是0,其它位为1,然后和 a 相按位与,成了。
int a=8; a=a>>3; a=1; >>(右移)3位相当于减小8倍
5.取最大值简易运算:#define max(a,b) (a>b)?a:b
6.extern:
extern是全局变量声明
只要声明全局变量就默认 前面加extern(程序员可以不加,但编译器默认加上)
若本文件 引用别的文件中的全局变量 一定要加上extern 声明一下
例如 #include "my_Fun.c"
extern int b;//b是在my_Fun.c中声明了的一个全局变量
这个extern 是个声明他可以在任何地方声明 引用了一个全局变量 (可以试试 在main()函数执行完之后声明 也不会出错)
这样在 工程的总头文件中就不需要考虑 先#include 哪个文件了
include是把整个都加载其中,包括文件里的所有的函数和变量。而采用extern只需要把需要的变量引用进来。这样可以保证执行效率,及资源节约!
7.char / short /int /double /long
char:1字节 short:2字节 int、long:4字节 double:8字节
16位编译器
char :1个字节
char*(即指针变量): 2个字节
short int : 2个字节
int: 2个字节
unsigned int : 2个字节
float: 4个字节
double: 8个字节
long: 4个字节
long long: 8个字节
unsigned long: 4个字节
32位编译器
char :1个字节
char*(即指针变量): 4个字节(32位的寻址空间是2^32, 即32个bit,也就是4个字节。同理64位编译器)(16位机,32位机,64位机各不相同)
short int : 2个字节
int: 4个字节(16位机是2B,32位&64位是4B)
unsigned int : 4个字节(16位机是2B,32位&64位是4B)
float: 4个字节
double: 8个字节
long: 4个字节(16位&32位是4B,64位是8B)
long long: 8个字节
unsigned long: 4个字节(16&32位是4B,64位是8B)
64位编译器
char :1个字节
char*(即指针变量): 8个字节
short int : 2个字节
int: 4个字节
unsigned int : 4个字节
float: 4个字节
double: 8个字节
long: 8个字节
long long: 8个字节
unsigned long: 8个字节
8.struct与union区别
https://blog.csdn.net/iamiwangbo/article/details/53395254
9.struct 与 typedef struct
typedef struct node{
datatype data;
struct node *lchild,*rchild;
}bintnode;
struct node:是一个结构体的类型名,就像int类型一样
如果不加typedef的话,以后定义变量就需要srtuct node 变量名就像int 变量名 这样的形式,比较麻烦
加了typedef的话,再定义变量就可以直接使用bintnode 变量名 的形式。也就是说bintnode由一个对象变成了一种类型