C语言关键字

程序内存组成:运行的程序分为代码区,数据区,BBS区,栈区,堆区

  • 代码区:存放代码的内存区域,在程序运行前就已经确定

  • 数据区:存放被赋予初始值的全局变量、静态变量和字符串常量

  • BBS区:存放初始化的全局变量和静态变量,内核将此段初始化为0

  • 栈区:增长方向,自上而下增长,存放临时创建的局部变量,存储函数调用的形参和返回值

  • 堆区:动态存储部分,由程序员分配、释放。

    • 如果程序员使用完申请的堆内存没有及时把它释放掉,那么这块内存就丢失了,就存在内存泄漏,内存的分配就变成不是连续的

    • 程序运行中动态分配的存储空间

    • 通常用malloc或new在堆中分配内存

volatile

可以防止变量被编译器优化,每次读取变量时,直接从变量地址中读取数据

  • 内存映射,通过内存寻址访问寄存器A
#define A (*(volatile unsigned long*) 0x40000000)
  • 如果该变量是多任务共享的,可以用volatile修饰

static

  • 作用于局部变量:表示该变量是静态局部变量
    普通的局部变量存储在栈上,函数每执行一次,都需要初始化一次
    静态局部变量存储在全局数据区,只初始化一次

  • 作用于全局变量:表示该变量是静态全局变量
    只初始化一次,不能被其他文件调用,不会和他文件中相同名字的变量发生冲突

  • 作用于当前函数:该函数为静态函数,不能在其他文件中直接被调用,好处,不会和其他文件中的函数冲突

//实现 0-255 循环
void Func(void)
{
    static unsigned char cnt=0;
    unsigned char buf[1];
    
    buf[0] = cnt++;
    delay(100);
}
posted @ 2022-08-10 16:01  伯宁君  阅读(79)  评论(0编辑  收藏  举报