c语言中buf内容怎么给指针,C语言 指针的使用
C语言 指针
当使用变量时出现长度不定,譬如在串口通信中,有些通信协议是不定长的,那么这个就应该使用指针;如果使用数组的话,会有下面这两个小问题,
要将数组的大小要定的比较大,已保证能够容纳最大的指令,这个相对于短小的指令来说就显得太浪费数组的资源了
有时候定义的数组很大,对系统的栈的内存会有不小的压力,因为在局部变量的使用都是在栈上
基于上面这两个问题,可以使用指针来优化,指针可以在申请时指定长度,不用像数组只要定义了大小就不可改变;此外,指针的分配是在堆内存的,这时需要注意就是不要让这个指针成为野指针,或者忘了释放导致内存泄露。
下面就以一个小例子来说明下,这个是在FreeRTOS下使用的函数,所以内存分配函数和释放函数与标准库不一样。
1. 定义:
BYTE * bybuf = NULL; //定义指针时赋值为NULL,避免该指针指到其他不可控的内存单元
2. 申请:
bybuf = (BYTE *)pvPortMalloc(Len);//分配内存,len:长度
//判断是否内存分配是否成功,若有NULL则内存分配失败
if(NULL == bybuf)
{
return eeror;
}
2. 初始化
memset(bybuf, 0, Len);//将bybuf指向的内存单元初始化为0,并不是必须的,因为下面立刻又对该内存进行操作,会别重新赋值
3. 使用
对指针指向的内存单元进行赋值操作
*bybuf = 0x11;
*(bybuf+1) = 0x10;
*(bybuf+2) = (BYTE)(screen_id>>8);
*(bybuf+3) = (BYTE)screen_id;
*(bybuf+4) = (BYTE)(control_id>>8);
*(bybuf+5) = (BYTE)control_id;
memcpy(bybuf+6, str, Len);
4. 释放
//使用完毕后,要释放该指针,并重新赋值为NULL
if(NULL != bybuf)
{
vPortFree(bybuf);
bybuf = NULL;
}
合起来的整个函数如下:
uint32_t SetTextValue(uint16_t screen_id, uint16_t control_id, uint8_t * str, uint16_t Len)
{
uint32_t error = SYS_ERROR;
BYTE *bybuf = NULL;
bybuf = (BYTE *)pvPortMalloc(Len+6);
if(NULL == bybuf)
{
return error;
}
*bybuf = 0xb1;
*(bybuf+1) = 0x10;
*(bybuf+2) = (BYTE)(screen_id>>8);
*(bybuf+3) = (BYTE)screen_id;
*(bybuf+4) = (BYTE)(control_id>>8);
*(bybuf+5) = (BYTE)control_id;
memcpy(bybuf+6, str, Len);
//使用bybuf
if(NULL != bybuf)
{
vPortFree(bybuf);
bybuf = NULL;
}
return error;
}
c语言中buf内容怎么给指针,C语言 指针的使用相关推荐
- c语言定义node类型指针,C语言指针的概念
在计算机中,所有的数据都是存放在存储器中的.一般把存储器中的一个字节称为一个内存单元,不同的数据类型所占用的内存单元数不等,如整型量占2个单元,字符量占1个单元等,在前面已有详细的介绍.为了正确地访问 ...
- c语言中什么函数可以作为虚函数,C++语言中的“虚函数”就像C语言中的指针,必须要弄懂的...
上一节较为详细的讨论了C++语言中基类被派生类继承过程中的内存模型,尤其较为详细的分析了虚函数及其虚表.虚表指针在内存中是如何分布,如何存储的,这对于理解C++语言中的"动态绑定" ...
- c语言中5l是数值或字符常量,C语言练习题-选择题(带答案)
以下为<C语言练习题-选择题(带答案)>的无排版文字预览,完整格式请下载 下载前请仔细阅读文字预览以及下方图片预览.图片预览是什么样的,下载的文档就是什么样的. C语言练习题-选择题(带答 ...
- c语言中int的取值范围_c语言入门(1)
c语言入门 C语言一经出现就以其功能丰富.表达能力强.灵活方便.应用面广等特点迅速在全世界普及和推广.C语言不但执行效率高而且可移植性好,可以用来开发应用软件.驱动.操作系统等.C语言也是其它众多高级 ...
- c语言中point的用法_关于C语言Switch语句,先学这些技巧够不够?
一.C语言中switch的用法 1.switch后面括弧内的[表达式],ANSI标准允许它为任何类型: 2.当表达式的值与某一个case后面的常量表达式的值相等时,就执行此case后面的语句,否则,就 ...
- c语言中3%3e2%3e1的值,C语言--ch2--数据类型和表达式.ppt
C语言--ch2--数据类型和表达式 第二章 数据类型和表达式 2.1 数据类型 在C语言中,数据类型可分为:基本数据类型,构造数据类型,指针类型,空类型四大类. 其中基本数据类型可分为: 整型:整数 ...
- matlab for判断语句,matlab使用笔记(一)——matlab语言中if、for语句与C语言中的差别...
好久没用matlab编写程序,上周在亲导师面前,愣生生是2小时没编出一选择函数的程序.羞愧至极,愤而写之.主要内容是matlab语言中与c语言中if.for语句的差别. 突然插一下!!!end.end ...
- 在c语言中,字符串topt65的长度是,c语言程序设计期末考试试题(含答案)123612210...
<c语言程序设计期末考试试题(含答案)123612210>由会员分享,可在线阅读,更多相关<c语言程序设计期末考试试题(含答案)123612210(10页珍藏版)>请在人人文库 ...
- c语言中eles后面分号的作用,C语言 if else 语句详细讲解
前面我们看到的代码都是顺序执行的,也就是先执行第一条语句,然后是第二条.第三条--一直到最后一条语句. 但是对于很多情况,顺序结构的代码是远远不够的,比如一个程序限制了只能成年人使用,儿童因为年龄不够 ...
最新文章
- 未来计算机体系结构,华中科大金海:未来是计算机体系结构的“黄金十年” 要培养大量创新人才...
- 禁止蒙层底部页面跟随滚动
- Binder Driver浅析:Binder线程池
- JAVA中的onkey_onKeyListener无法在虚拟键盘上工作
- 常用shader固有函数
- 计算机系统基础:总线结构知识笔记
- ado.net操作数据库
- 多个小int的乘法小心溢出哦(记洛谷P1615题WA的经历,Java语言描述)
- 信息学奥赛一本通(2026:【例4.12】阶乘和)
- Processing编程学习指南1.5 颜色透明度
- 【sklearn第二讲】基于sklearn的机器学习
- Cisdem PDF Converter OCR使用教程:在 Mac 上将PDF 转换为 Word
- 1496.数括号法求广义表深度
- 迅雷离线下载怎么使用?迅雷离线下载使用方法
- push rejected by remote
- 【参赛作品23】华为OpenGauss数据库安装与使用
- 怎么生成a类型的对象 java_用一个 java 程序! 写一个类A, 该类创建的对象可以调用方法f输出英文字母表,然后再编写...
- 【白帽子讲Web安全】第二章 浏览器安全
- GCC源代码分析(1): GCC中的树
- SpringBoot项目中post请求,参数丢失,偶尔丢失,发现问题
热门文章
- 负载均衡SLB新功能介绍
- 中国加速计算市场第二名,宁畅正领跑“智能算力定制”赛道
- 低代码发展专访系列之七:低代码的火爆需要不一样的声音么?
- 阿里云推出“磐久”云原生服务器系列 能效和交付效率大幅提升
- 华为云专属月·行业深耕专项行动正式开启
- 【我想进大厂】Redis夺命连环11问
- 两大硬件设计被OCP官方接受,腾讯成国内互联网公司第一家
- 分布式精华问答 | 分布式与集群的区别是什么?
- python django实例_python django 模板实例
- vue2.0项目部署到服务器_vue项目运行npm run build打包后如何发布到服务器?