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;

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/527864.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c语言常考的程序,C语言 一些常考得东西

C语言基础测试1.#include “heima.txt” 表示文件在哪个目录?( D)A、系统根目路径B、编译器路径C、桌面D、与当前文件目录一致.2.C源程序中不能直接打印的进制数是( )A. 二进制 B.十六进制 C.十进制 D.八进制3.十六进制数0x1DA2转换成二进制数是多少(…

杭电2005题c语言答案,杭电2005

题不难,但细节较多,所以。。。不但二月闰年有影响,七八月都是31天,这个也得专门分开讨论,还有就是七八月份开讨论后,加的基数是三到七月的,不能完全复制上面的代码,基数得改~做题还是…

软件设计师c语言算法皇后,软件设计师历年试题-算法.ppt

软件设计师历年试题-算法1996年下午试题三 【E-R图】 1996年下午试题三 【问题】  填充下列 SQL 程序 3.1~3.4 中的 ①~⑦,使它们分别完成相应的功能:程序 3.1:统计参加比赛时运动员人数  SELECT __①__  FROM A…

c语言getch() 头文件,用getch()需要头文件吗?

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼#include #include #include "string.h"#includeusing namespace std;struct student{ int num;char name[10];char banji[10];float score[3];struct student *next;};struct student *creat(){struct student *head,*p…

android 服务自动结束,Android服务自动停止

我正在制作一个带有闹钟功能的应用程序。我正在使用这种服务,不断检查设备的当前时间与我的数据库中的时间。Android服务自动停止我的问题是,如果应用程序从后台删除或设备是rebooted,此service停止。我已经使用START_STICKY来保持它在后台运…

android自定义dialog 全屏,自定义dialog全屏显示

默认的Dialog是不能全屏的。也就是怎么设置Dialog的Layout都没用的。下面给出实现Dialog实现全屏的两种方式:1、代码实现。这中方法相对比较简单首先继承Dialig,然后再构造函数中添加super(context, android.R.style.Theme);setOwnerActivity((Activity)…

全志android启动串口无打印,CSK.Blog-给MK802(USB大小的Android4.0小PC)引出串口信号,变成ARM开发版...

最近忙各类事情,blog写的不系统,见谅。这几天搞到了前不久被媒体宣传过的只有U盘大小的Android 4.0小PC。他的样子如下,使用HDMI接口连接显示器再外接一个usb键盘鼠标就能作为PC用了。托朋友买了台,试用了下果然还不错&#xff0c…

android 动态添加颜色,Android绘制一个三角形并且可动态改变颜色

方法一:这种方法的三角形角度没法控制,因为其实是矩形旋转。android:fromDegrees"45"android:pivotX"135%"android:pivotY"15%">android:width"16dp"android:height"16dp" />然后将此xml设置为…

支付宝 android 2.3,app被拒记录-2.3-包含支付宝

2. 32020年8月21日 上午1:29发件人 Apple* 2. 3 Performance: Accurate Metadata### Guideline 2.3.1 - PerformanceWe discovered that your app contains hidden features. Attempting to hide features, functionality or content in your app is considered egregious beha…

android adb 静默安装,Android_如何静默安装

Android常用代码之普通及系统权限静默安装APK本文主要介绍程序如何安装apk,包括普通模式安装和系统权限静默安装。如果是非系统应用请直接查看:Android常用代码之APK root权限静默安装,查看更完美的解决方案。1、普通模式安装,调用…

android 群控 网络 adb,安卓群控.sln · 罗金方/结合mini和adb命令,和adb socket实现安卓群控 - Gitee.com...

Microsoft Visual Studio Solution File, Format Version 12.00# Visual Studio 14VisualStudioVersion 14.0.25420.1MinimumVisualStudioVersion 10.0.40219.1Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") "安卓群控", "安卓群…

android界面初始化设计,界面数据初始化及各个按钮功能的实现

1.课程的初忠与目的问题:通过上课发现,在学习完成Android基本组件后,还会迷茫于如何完成一个完整的应用。本实践课程通过开发完成一个“畅听音乐”的小项目,实现从基本组件的学习到项目开发过程的转变。2. 课程的特点这是一门实践…

html中图片动态效果代码,动态网页设计代码 网页制作动态图片效果源代码

动态网页设计需要用到什么工具?一般的用网页三剑客,dreamwear一般必用,比较好上手的,html是要懂的,cssdiv的标注设计也是要学习的。 如果是做前台页面设计会用到的工具:firework、flash、ps、 coreldraw 如…

html文件设置断点调试,断点调试

断点调试使用 ES2015 特性来开发 Node.js 项目可以带来巨大的便利,但同时由于有些特性现在还不支持,需要借助 Babel 编译,运行的代码实际上是编译后的代码,这样给调试带来很大的麻烦。ThinkJS 从 2.2.0 版本开始支持断点调试源代码…

html如何太假icon图标,CSS3 icon font完全指南(CSS3 font 会取代icon图标)

为什么要将icon做成字体?在很多网站项目中,我们常常会用到各种透明小图标,然后网站要兼容各个浏览器,也可能会有多个尺寸,甚至还要考虑换肤等需求。那么我们就要将这些小图标输出为多种尺寸、颜色和文件格式&#xff0…

html5 video 直播流无声音,【报Bug】html5plus 使用 VideoPlayer 播放部分rtmp没有声音

详细问题描述[内容]使用 html5plus 使用 VideoPlayer 播放流媒体,播放m3u8格式正常,但rtmp格式部分有问题。希望官方能确认是否是html5plus自身的缺陷呢,是否对某些编码类型的rtmp不支持?1、比如社区之前出现过的湖南卫视rtmp&…

kodi android 目录,Kodi添加本机和电脑上的电影视频、音乐、图片目录教程

很多人都想在家看电影时能享受到电影院的那种大屏快感,Kodi正是这样的一款强大的家庭影院影音播放中心!不过有些用户对它的使用不是很了解,我们一起来学习一下。使用Kodi你可以非常方便地在客厅的 Kodi 中播放寝室电脑里或 NAS 中下载好的电影…

html5 电流效果,在HTML5 Canvas 2D上绘制云雾中的电流动画特效

JavaScript语言:JaveScriptBabelCoffeeScript确定ctrl {numParticles: 35,maxRadius: 80,hue: 220,hueRange: 15,fade: 0.36,halo: true,zappy: true,zapComplexity: 1}var gui new dat.GUI();gui.add(ctrl, numParticles, 1, 150).step(1);gui.add(ctrl, maxRadi…

2021深圳各中学高考成绩查询,深圳四大高中在2021年高考深一模的前500名分布数据...

看到深圳四大高中在2021年高考深一模的前500名分布数据:深圳中学名列前茅,前500名中占166席,且文科、理科第一名均来自深中;物理方向前10名中深中6人,实验3人;历史方向前10名中深中3人。深圳实验学校高中部有84人进入前…

微型计算机各部件之间通过总线传递各种信息,2015年9月计算机一级考试基础及MSOffice应用选择真题...

一、选择题(每小题1分,共20分)1、控制器的主要功能是 .A.指挥计算机各部件自动、协调地工作B.对数据进行算术运算C.进行逻辑判断D.控制数据的输入和输出2、下列度量单位中,用来度量CPU时钟主频的是 .A.MB&a…