【嵌入式】嵌入式C语言用法积累(长期更新)
1、C语言排序
#include<stdio.h> #include<stdlib.h> int cmp(const void* _a, const void* _b) { int a = *(int*)_a, b = *(int*)_b; return a-b;//a-b是从左到右增大 } int main(){ int nums[]={4,3,2,1}; int numsSize =sizeof(nums)/sizeof(int); qsort(nums, numsSize, sizeof(int), cmp); return 0; }
2、C语言二维数组创建方法
int** ans = malloc(sizeof(int*) * r); for (int i = 0; i < r; i++) ans[i] = malloc(sizeof(int) * c);
3、C语言51单片机unsigned char输出方法
u8 save_value=52; printf("%bd\n",save_value); //52 正确输出 printf("%d\n",save_value); //13312 错误输出 为52*256
原因51单片机 串口用 printf输出 ,当输出的数据类型是unsigned char的时候 电脑收到的数自动乘上了256_百度知道 (baidu.com)
4、C语言哈希表使用方法
(74条消息) C开源hash代码uthash的用法总结(1)_逍遥子_的博客-CSDN博客_uthash 多个key
C语言uthash介绍 - zivlv - 博客园 (cnblogs.com)
5、正则表达式
(74条消息) 正则表达式(全)_懂点计算机的小白的博客-CSDN博客
6、关于memset memcpy等mem系列的内存操作指令
能不用尽量不用吧,编程一时爽,BUG火葬场,出了问题也不知道怎么回事
7、define用法
define可以嵌套头文件使用,例如main文件include A,A文件include B,main可以使用B中的define
define A的值取决于使用该define A时之前一次define A的值,如果两次define A的值不同,编译器会警告,若相同则不会警告。
8、define注意事项
代码中出现 if define ... else ... endif 的宏时需要特别注意include头文件的顺序,因为此时先后顺序会改变编译结果。
每个.c文件都是先单独编译的,如果A.c文件和B.c文件都使用同一个头文件,后A中修改了define X的值,不会影响到B.c文件的值,此时A.c和B.c文件将输出不同的X值
9、数组内写结构体方法
RegInfo_t regCentInfo[] =
{
/* 控制器1 ; 服务 2*/
{
.appID = 0x01,
.funID = SERV_QUE,
.servID = 0X02,
},
/* 控制器2 ; 服务 5*/
{
.appID = 0x02,
.funID = SERV_QUE,
.servID = 0X05,
},
};
10、函数指针
typedef struct cJSON_Hooks {
void *(*malloc_fn)(size_t sz);//返回值是void*,输入为size_t sz,名为malloc_fn的函数指针
void (*free_fn)(void *ptr);//返回值是void,输入为void *ptr,名为free_fn的函数指针
} cJSON_Hooks;
cJSON_Hooks->malloc_fn=malloc;//指针指向malloc函数
标签:
嵌入式
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?