嵌入式(C语言基础)
1.内存分为四个区域:栈区堆区数据区代码区栈区:由编译器自动分配存放局部变量堆区:程序员手动分配手动存放数据区:存放全局变量静态变量代码区:只读存放程序指令2.作用域和生命周期作用域是变量可以使用的范围生命周期是变量在内存的时间3.文件编译后会生成指令和数据函数就是指令变量就是数据4.关键字static,const,volatilestatic:修饰局部变量时将局部变量的生命周期延长为整个程序但作用域还是所在的函数会保留上次的值修饰全局变量时全局变量只能在所在的文件里面被使用其他文件不能使用该全局变量修饰函数时函数不能被其他文件调用只能在该文件里面被使用const:const int *p修饰变量将变量的值为固定int * const p修饰指针将指针固定但是指向的值可以变volatile:修饰的变量不会被编译器优化并且每次都要从内存里面读取通常用于内存映射的硬件寄存器中断服务程序5.C编译流程预处理:将.c和.h文件变成.i文件不会检查语法错误用到预处理器编译:将.i文件变成.s文件会检查语法错误用到编译器汇编:将.s文件变成.o文件用到汇编器链接:将.o文件变成可执行文件用到链接器6.define和typedef的区别define:在预处理时进行文本替代全局替换不会检查语法错误typedef:在编译时处理在所在的作用域内给一个存在的类型起别名7.数组和链表的区别数组:在内存里面是一个连续的区域插入和删除数效率低查找数据效率高链表:在内存里可以存放任何地方不要求连续插入和删除数据效率高查找效率低8.malloccallocrealloc的区别mallocsize_t size):分配一个size大小字节的连续内存空间不初始化内存分配好的内存的值不确定callocsize_t nmemb,size_t size:分配nmemb个大小为size字节的连续内存空间会将分配好的内存的值初始化为0realloc(void *ptr,size_t size):用于调整已经分配好的内存空间从ptr所指的位置开始调整为size大小字节的内存空间9.函数指针指针函数回调函数函数指针参数的区别函数指针:本质就是一个指针其指向一个函数int (*fun)(int x,int y)指针函数:本质是一个函数其返回值为指针int* fun(int x,int y)回调函数:就是把这个回调函数的地址放在另一个函数的参数里面这个参数是一个函数指针当函数调用时会回头调用回调函数函数指针参数:就是函数定义时的参数是一个函数指针10.指针数组和数组指针指针数组:本质是数组元素是指针int *ptr[]数组指针:本质是指针指向整个数组int p[]11.野指针和悬指针野指针:指向一个未初始化不知道指向什么的地址的指针悬指针:指向一个曾经有效但是已经被释放的内存的地址的指针