C/C++
小小角色熊
横看成岭侧成峰,远近高低各不同
展开
-
关于《C陷阱和缺陷》中的(*(void(*)())0)()表达式的解析
如《C陷阱和缺陷》书中所说,表达式(*(void(*)())0)()功能主要用于模拟在计算机启动时,作为硬件调用首地址为0的子程序的C语句。对于第一次看到这个表达式的人,都会有无从下手的感觉。但通过对书中所阐述的解释,终于一点一点理解了这个表达式。解析如下:1.指向函数指针的定义为:(type) (*Funcp)(),即Funcp为指向函数的指针,则(*Funcp)()为调用其指向函数...原创 2018-10-08 09:44:37 · 243 阅读 · 1 评论 -
cJSON的构造和解析
1.JSON格式简述JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写,同时也易于机器解析和生成。它基于JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#...原创 2019-03-28 21:50:29 · 1160 阅读 · 0 评论 -
static在C语言中主要是两种用法
static在C语言中主要是两种用法1、修饰局部变量2、修饰函数和全局变量局部变量按照存储形式来分,分为auto,static,register首先从内存四区的角度去看,auto即为普通的局部变量,存储在栈上,当函数结束时,随之释放。 register为寄存器变量,存放在寄存器里面,调用速度快。在C语言中register变量不能取地址,会报错。而在c++中,对reg...原创 2019-01-04 10:06:01 · 349 阅读 · 0 评论 -
关于void*与void**的区别
由于void就是不检查数据类型,所以,对于编译器来说, void* 和 void** ,甚至后面n个 * ,都是一样的.问题的关键在于,让我们这些编程的人可以区分.原则上,void* 可以是一个一级指针,二级指针,甚至是n级指针.但我们的使用习惯是, 一个 * 代表一级指针,多级指针就用n个*表示. 在实际使用的时候, 如果告诉你, void* 是一个n级指针,你不会觉得别扭吗?假如是一...原创 2018-10-21 20:21:01 · 758 阅读 · 0 评论 -
(void)0和0的区别及用法
(void)0相当于宏NULL,NULL本身的含义为“空”,在c语言代表“不存在、不确定”的含义。0不能简单的理解为“没有”的意思,在c语言及二进制中,0和1代表的是“一件事物的正反两个方面“,0是一种明确的状态,不是没有含义。举例:1、就像一个led灯开关一样,0代表关,1代表开。”关“是一种明确的状态,代表灯没有亮,”开“也是一种明确的状态,代表灯亮了。”空“代表什么呢?代表没有看...原创 2018-10-08 10:53:39 · 5622 阅读 · 0 评论 -
((void *) 0)的含义和void的一些细节
一、在c语言中,0是一个特殊的值,它可以表示:整型数值0,空字符,逻辑假(false)。表示的东西多了,有时候不好判断。尤其是空字符和数字0之间。为了明确的指出,0是空字符的含义,用用到了: ((void *) 0) 这个表达式。表示把0强制转换为空字符,不管以前代表的什么含义。在c的标准头文件中,就是这样定义NULL的:#define NULL ((void *) 0)...原创 2018-10-08 10:40:51 · 5786 阅读 · 0 评论 -
C陷阱与缺陷(小结2)
语法分析(语句、声明的语法细节)1.理解函数声明任何C变量的声明都由两部分组成:类型以及一组类似表达式的声明符如:float (*h)(); 其中类型为float,声明符为:(*h)()。整个声明表示:h 为一个函数指针,h所指向函数的返回值为浮点型。由一个给定类型的变量的声明得到该类型的类型转换符:将变量名和声明部分末尾的分号去掉,再将剩余的部分用一个括号整个“封装”起来...原创 2018-10-08 10:13:55 · 155 阅读 · 0 评论 -
C语言缺陷与陷阱语义分析
语义分析(程序员本意是希望表示某种事物,而实际表示的却是另外一种事物)1. 指针和数组数组值必须注意的两点:(1)C语言只有一维数组,且数组大小必须在编译期作为一个常数确定下来;(2)对一个数组只能进行:确定该数组的大小,以及获得指向该数组下标为0的元素的指针。若一个指针指向的是数组中的一个元素,那么给该指针加1就能够得到该数组中下一个元素的指针,该该指针减1就能够得...原创 2018-10-08 10:08:48 · 297 阅读 · 0 评论 -
C语言陷阱与缺陷--- 连接
(将C程序的若干部分分别进行编译,最后整合起来)1.连接器连接器通常把目标模块看成是由一组外部对象组成的。其输入为一组目标模块和库文件,输出为一个载入模块。2.声明与定义声明:为变量分配地址,而不分配存储空间;定义:为变量分配地址和存储空间。在变量前加extern表示对变量的引用变量可进行多次声明,但只能定义一次。3.命名冲突与static修饰符 在...原创 2018-10-08 09:57:07 · 497 阅读 · 0 评论 -
C语言缺陷与陷阱(3)
语义分析(程序员本意是希望表示某种事物,而实际表示的却是另外一种事物)1. 指针和数组数组值必须注意的两点:(1)C语言只有一维数组,且数组大小必须在编译期作为一个常数确定下来;(2)对一个数组只能进行:确定该数组的大小,以及获得指向该数组下标为0的元素的指针。若一个指针指向的是数组中的一个元素,那么给该指针加1就能够得到该数组中下一个元素的指针,该该指针减1就能够得到该数...原创 2018-10-08 09:52:57 · 186 阅读 · 0 评论 -
C陷阱与缺陷1
一. 词法分析(将程序分解成符号的过程)P.S:程序中的单个字符孤立起来没有任何意义,只要结合上下文才有意义。1.=不同于===:赋值运算符==:关系运算符注意:不要把赋值运算符用成了关系运算符;也不要把关系运算符用成了赋值运算符(当确实需要对变量赋值并检查该变量的新值是否为0时,最好的处理方法是—显式地进行比较,如if((x=y)!=0)或将常量放在关系运算符...原创 2018-10-08 09:47:12 · 120 阅读 · 0 评论 -
cJSON在STM32中的应用
写在前面:将JSON应用在STM32上面已经很普遍了,但还是有很多问题在网上找不到答案,毕竟自己造轮子和找轮子造车还是有点差别。今天就总结一下最近在STM32上使用cJSON所遇到的一些问题。-------------------------------------------正文开始线-----------------------------------------------什么...原创 2019-03-28 21:52:44 · 819 阅读 · 0 评论