c语言
学习时自我总结
m0_61973119
这个作者很懒,什么都没留下…
展开
-
printf函数变长参数处理
表示接受可变数量的参数。它允许你在调用宏时传入任意数量的参数。原创 2024-08-12 20:33:02 · 146 阅读 · 0 评论 -
浮点数如何存储
(sign) s是符号位,1表示负,0表示正(exponent) E的作用是对浮点数加权,这个权重是2的E次幂(significand) M是一个二进制小数。原创 2024-07-31 15:20:45 · 276 阅读 · 0 评论 -
函数形参是void*类型如何转换
让void作为形参的目的在于,可以让一个函数处理更多的数据类型,并且各个类型参数的处理方式类似,就没有必要写多个函数进行处理。void的字面意思是“无类型”,void *则为“无类型指针”,void *可以指向任何类型的数据。原创 2024-07-22 17:22:38 · 293 阅读 · 0 评论 -
DEVC++软件下载
说明:(版本不影响本安装教程的详细性,均可通用)本文章主要参考下面这位博主的博客。原创 2024-07-16 15:56:05 · 512 阅读 · 0 评论 -
无符号数和有符号数的转换
有符号转无符号,则有符号数加上(2^最大位数)无符号转有符号,则有符号数减去(2^最大位数)原创 2024-07-16 14:58:08 · 746 阅读 · 0 评论 -
C语言丢失精度 如何实现高精度计算
int :占4个字节,也就是32位,及最大值是2^32-1=1024*1024*1024*4-1=4294967295以上说法错误,因为Int是有符号类型整数,所以最高位是符号位,及int的最大值应该是2^31-1由上面的程序可以得到,int的最大值是多少,以及如果计算值超过了Int的最大值之后数据如何存储。原创 2024-07-14 22:18:45 · 235 阅读 · 0 评论 -
C语言如何解析JSON数据
用于在一个字符串中查找另一个字符串第一次出现的位置。一个字符串处理函数,用于比较两个字符串的大小关系。用于将字符串分割成子字符串的函数,通常用于按照指定的分隔符将一个字符串拆分成多个部分。用于将字符串转换为整数(int类型)将一个字符串拷贝到另一个字符串中用于在字符串中查找指定字符的第一个匹配位置。原创 2024-05-09 12:13:32 · 1663 阅读 · 0 评论 -
代码大全之If语句
1、首先写正常代码路径,再处理不常见情况。把正常情况的处理放在if后面而不要放在else后面。(方便读者对于流程的理解,而不是把时间浪费在错误处理上)原创 2024-03-12 15:54:55 · 362 阅读 · 0 评论 -
代码大全之基本数据类型
任何其他文字量都应该换成更有描述性的表示。5、strncpy代替strcpy。1、一条很好的经验法则是,原创 2024-03-12 15:19:39 · 342 阅读 · 0 评论 -
struct之面向对象编程
【代码】struct之面向对象编程。原创 2024-03-11 16:44:51 · 368 阅读 · 0 评论 -
共用体union
共用体又叫做联合体,共用体的特性如下:1.共用体的所有成员共用一段内存空间,且所有成员的起始位置是一致的2.共用体的值由最后赋值的成员决定3.共用体的内存大小基本数据类型。原创 2024-03-06 13:15:55 · 501 阅读 · 0 评论 -
BMS开发之面向对象思想(adbms1818)
再次返回来看结构体,首先tx_data[6]里面存储的就是寄存器里面所有位的数据,rx_data[8]收到的数据(包括PEC0 PEC1),rx_pec_match是标志位,判断接收到的PEC和根据6位数据计算出来的PEC是否相同,相同数据接收正确,不同数据接收错误。c_code[0]存储电池1电压,c_code[1]存储电池2电压......,c_code[17]存储电池18电压。每组存放3个电池的电压值,每一个电池的电压值用16位表示。处理数据的办法有两种,我们已知有6组数据,每一组数据有3个。原创 2024-01-04 09:54:01 · 1479 阅读 · 0 评论 -
进制前后缀
进制 英文 范围 前缀 后缀 二进制 Binary 0-1 0B B 八进制 Octal 0-7 0O O 十进制 Decimal 0-9 无 D 十六进制 Hexadecimal 0-9,A-F 0x H原创 2024-01-03 13:28:20 · 388 阅读 · 0 评论 -
printf函数不可重入问题(FreeRTOS)
问题现象:如果在最开始的代码中加入printf打印函数,函数只会打印一部分,且后面的程序不在运行,直接异常。代码调试,结果也是遇到printf函数卡死,进入HardFault_Handler中断屏蔽打印函数之后,代码正确运行,说明printf函数严重影响程序的运行。原创 2023-12-27 14:50:27 · 970 阅读 · 0 评论 -
struct的起源
在最开始,出现了int,char,bool,short等类型,但是慢慢的,我们发现我们要一次性定义很多个变量,比如我要定义1000个int型变量,那么我要写一千次定义看,int a,b,c,d,e,f,g......,然后这种描述方法十分的繁琐,所以程序员研究出了一维数组,二维数组......,但是随着代码的书写,我们发现我想将不同类型的变量定义在一起怎么处理,毕竟数组针对的是同类型的变量,于是就产生了struct。从这段小故事中我们可以得出:很多事物的出现都是源于程序员需要那个东西,所以发明出来。原创 2023-12-19 14:23:22 · 336 阅读 · 0 评论 -
软件编程规范
二、变量:定义时就初始化;通信时要了解双方的字节顺序(TCP/IP通信);一、函数设计原则:函数尽可能短小(100行以内);函数实现小功能用宏定义;检查函数输入参数的有效性。四、注释:需要注释掉一块代码时。采用#if 0和#endif条件编译语句进行。原创 2023-12-15 15:29:26 · 397 阅读 · 0 评论 -
求min和max较完善的写法
题目:给定一个数组,求出其数组中的最大值和最小值。原创 2023-12-06 13:38:03 · 415 阅读 · 0 评论 -
枚举在实际中的应用
Enum(枚举)是一种特殊的数据类型,它允许程序员定义一个变量,该变量只能取特定的预定义值。在许多编程语言中,enum可以用于定义一组常量,这些常量可以作为变量的取值范围。原创 2023-12-06 09:08:35 · 427 阅读 · 0 评论 -
哈希表初学理解
哈希原创 2022-06-30 16:38:48 · 318 阅读 · 1 评论 -
函数和函数的调用者通信的方式
函数的返回值函数的参数全局变量。原创 2023-11-02 21:51:13 · 45 阅读 · 0 评论 -
typedef 和define
/相对来说没有用typedef的形式直观,尤其在需要大量指针的地方,typedef的方式更省事。// 这多数不符合我们的意图,它只声明了一个指向字符变量的指针和一个字符变量;不是的,它实际上相当于char* const。另外,因为typedef是定义了一种类型的新别名,不是简单的字符串替换,所以它比宏来得稳健。定义一种类型的别名,而不只是简单的宏替换。typedef是定义了一种类型的新别名,不同于宏,它不是简单的字符串替换。//同时声明了两个指向字符变量的指针。#define 简单的文本替换,在。原创 2023-11-10 16:20:55 · 40 阅读 · 0 评论 -
单片机和linux对硬件的操作区别
linux应用层无法实现对寄存器的存取。Linux分为用户态和内核态,当处于用户态时,哪怕是知道硬件寄存器的地址,也不能直接访问(权限不够,mmu对其管理)。linux可以使用mmap内存映射直接访问硬件,但是实际也是驱动程序协助。Linux:linux必须。单片机:应用程序可以。原创 2023-11-12 14:14:26 · 82 阅读 · 0 评论 -
结构体的几种初始化方法
基本初始化是最常用的结构体初始化方法,通过使用“{}”括号来初始化结构体变量。常量表达式初始化可以在结构体定义时用常量表达式对结构体成员进行初始化。指定成员初始化可以通过指定成员名来初始化结构体的成员变量。3.常量表达式初始化。4. 定义后逐个赋值。原创 2023-11-12 15:30:34 · 10659 阅读 · 0 评论