
开发之C语言
记录C语言相关知识点
liang_xianhui
嵌入式 驱动 C
展开
-
嵌入式C中的静态变量理解及解析
静态变量与动态变量基本概念静态变量:指的是在编译时(compiling-time)变量的地址和大小都已经确定下来的变量动态变量:指的是在运行时(run-time)变量的地址和大小才开始确定。这个确定不是持续长久的,当程序使用完后,系统会自动删除回收在嵌入式系统中,为了追求项目的可靠性,因此会较常使用静态变量。静态变量的基本划分静态变量可以划分为全局静态变量(global static variable)和局部静态变量(local static variable)。//注:该部分划分仅为个原创 2020-05-31 16:10:49 · 627 阅读 · 0 评论 -
C语言进阶-goto和void
1.0 goto 一般情况下少用goto,甚至是慎用2.0 void2.1 C语言没有定义void究竟是多大内存的别名 因为没有void的标尺,无法在内存中裁剪出void对应的变量 但是可以定义void类型的指针,指针的大小是没有固定的 void指针的意义:2.1.1 C语言规定只有相同类型的指针才可以相互赋值2.1.2 void* 指针作为左值...原创 2018-09-03 00:00:13 · 196 阅读 · 0 评论 -
C语言进阶-const和volatile
1.0 const_只读变量1.1 congst修饰的变量是只读的,本质还是变量1.2 const修饰的局部变量在栈上分配空间1.3 const修饰的全局变量在全局数据区分配空间1.4 const只在编译期有用,在运行期无用1.5 const修饰的变量不是真的常量,它只是告诉编译期该变量不能出现在赋值符号的左边1.6 在现代C语言编译器中,修改const全局变量将导致程序奔溃,是因...原创 2018-09-03 00:01:41 · 159 阅读 · 0 评论 -
C语言进阶-if....else和switch...case效率问题
摘自:https://www.cnblogs.com/balingybj/p/5751707.htmlswitch...case与if...else的根本区别在于,switch...case会生成一个跳转表来指示实际的case分支的地址,而这个跳转表的索引号与switch变量的值是相等的。从而,switch...case不用像if...else那样遍历条件分支直到命中条件,而只需访问对应索引号...转载 2018-11-15 16:51:31 · 482 阅读 · 0 评论 -
C语言进阶-struct和typedef struct理解
注:本文从http://www.cnblogs.com/qyaizs/articles/2039101.html学习所总结的内容1.在C和C++中,用法不一样 如:在C中定义一个结构体类型需要使用typedef: 1. typedef struct Student { int a; }Stu;则声明变量时:Stu stu1;(如果没有typedef就必须用...转载 2018-11-19 01:21:00 · 1478 阅读 · 0 评论 -
嵌入式系统中堆heap和栈stack的管理——如何计算stack size
程序运行的各种存储段分类程序运行时在内存中主要有代码段、数据段、堆栈段(堆空间和栈空间)、进程头、动态链接库等区域。 其中数据使用到的段包括 数据段:静态内存空间,其中数据的总大小和初始值在编译时确定,数据在整个程序运行时一直存在。 栈空间:自动内存空间,其中数据的大小在编译时确定,数据的分配和释放也由编译器在函数进入和退出时插入指令完成,数据生命周期和函数一样。 堆...转载 2018-12-05 21:02:59 · 6908 阅读 · 2 评论 -
C语言进阶之路(三)----野指针的产生原因及解决办法
1.会产生野指针的做法#include <stdio.h> //这就是一种错误的写法 int main(){ int *p = NULL; p = (int *)malloc(4); //释放P所指向的内存空间,但指针变量p仍然留在栈中,成为了野指针 if (p != NULL){ f...转载 2018-12-09 01:06:09 · 291 阅读 · 0 评论 -
C语言进阶之路(一)----C语言的内存四区模型
内存四区模型:操作系统给C/C++编写的程序分配内存,通常将分配的内存划分为以下四个区域:1.栈区:存放局部变量,用完由操作系统自动释放2.堆区:动态分配给程序的内存区域,由程序员手动释放3.数据区:分为两种:(1)常量区:存放常量,一般是字符串常量(2)全局区/静态区:存放全局变量和静态变量4.代码区:存放可执行代码的区域示例如下:int main() { ...转载 2018-12-09 01:08:46 · 173 阅读 · 0 评论