![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C笔记
断章zzz
小小程序宠物
展开
-
拷贝结构体的三种方法比较
方法一:做全量拷贝,浪费时间和空间方法二:返回局部变量指针,不安全,野指针方法三:最佳,对函数入参地址操作PERSON_T func_p1(void){ PERSON_T a; //对a赋值 return a;}PERSON_T *func_p2(void){ PERSON_T a; //对a赋值 return &a;}int *func_p3(PERSON_T *t){ //对*t赋值 return 0;}...原创 2022-01-05 10:55:46 · 1065 阅读 · 0 评论 -
使用malloc,却不知道拷贝数据的长度时怎么办
遇到如下情况:需要 copy 字符串,定义指针,分配空间时却不知道长度。void copy_str_func(OUT char *str){ ;}void test(void){ char *str = NULL; str = Malloc(????); //不知道分配多少 copy_str_func(str); printf("str:%s", str); Free(str);}方法:在 copy_str_func() 函数里使用mall原创 2022-01-05 10:38:20 · 486 阅读 · 0 评论 -
volatile关键字用法
描述:易变的,“直接存取原始内存地址”,如果没有volatile关键字,则编译器可能优化读取和存储,可能暂时使用寄存器中的值,如果这个变量由别的程序更新了的话,将出现不一致的现象。需要加volatile:1) 中断服务程序中修改全局变量;2) 在多线程、多任务应用中,全局变量被多个任务读写;3) 外设寄存器地址映射...原创 2022-01-05 10:16:38 · 196 阅读 · 0 评论 -
读Flash等读接口中,关于二级指针入参的用法注意
void read_demo(UINT_T *out_value){ BYTE_T *buff = NULL; flash_read(&buff); /* 方法一 */ UINT_T *temp = (UINT_T *)buff; *out_value = *temp; Free(temp); //注意temp和buff指向同一个地址,不要double free temp = NULL; buff = NULL; /*原创 2022-01-05 10:01:05 · 585 阅读 · 0 评论