单片机易忘点总结

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xiaolongwoaini99/article/details/80446257

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:

扫描二维码关注公众号,回复: 2912348 查看本文章

    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由一个对象变成了一种类型

猜你喜欢

转载自blog.csdn.net/xiaolongwoaini99/article/details/80446257