有时候我们会弄不清什么时候用指针,什么时候不用指针。我习惯性是不用指针的,因为我自己用不好指针,可能出现某些bug。但是一个合格的程序员,即使不用指针,也应该掌握使用指针的各种用法。
碰到下面这种情况的时候,必须使用指针。

uint8_t obu_buffer_[kBufferSize] = {0};
int length = data_stream_->read(obu_buffer_, kBufferSize, 0);
// 路端传给车端的数据:头 + obuMsg长度 + ObuMsg + 校验和
// 1.头 :2字节 , 0x60,0x61
// 2.obuMsg长度 : 2字节
// 3.ObuMsg :长度视其内容而定
// 4.校验和: 1个字节 ,为前面所有字节的校验和
if (obu_buffer_[0] == 0x60 && obu_buffer_[1] == 0x61) {std::memset(&v2x_message_, 0, sizeof(v2x_message_));
read_obu_failed_count_ = 0;
uint16_t* obu_length = reinterpret_cast<uint16_t*>(&obu_buffer_[2]);
}

上面的 obu_buffer_[]uint8_t类型,但是通过udp的data_stream_->read(obu_buffer_, kBufferSize, 0);读取后,obu_buffer_被赋值,他的值是连续内存的值。
obu_buffer_[2]obu_buffer_[3]分别为1个字节,连在一起这两个字节的内容组成了 【obuMsg长度 : 2字节】,所以此时我么使用指针的方式uint16_t* obu_length = reinterpret_cast<uint16_t*>(&obu_buffer_[2]);两个uint8_t类型数据的地址组合在一起并reinterpret_cast为uint16_t*,才能获取到obuMsg长度,此时是不能分别通过obu_buffer_[2]这种方式来获取到obuMsg长度。

【c++】13.必须用指针取值的情况.md相关推荐

  1. 【C 语言】一级指针 易犯错误 模型 ( 判定指针合法性 | 数组越界 | 不断修改指针变量值 | 函数中将栈内存数组返回 | 函数间接赋值形参操作 | 指针取值与自增操作 )

    文章目录 一.判定指针合法性 二.数组越界 三.不断修改指针变量值 四.函数中将栈内存数组返回 五.函数间接赋值形参操作 六.指针取值与自增操作 一.判定指针合法性 判定指针合法性时 , 必须进行如下 ...

  2. 初学 Delphi 嵌入汇编[13] - 地址参数用 [] 取值

    为什么80%的码农都做不了架构师?>>>    //关于地址参数(var/out) function Fun(var x,y: Integer): Integer; asmmov e ...

  3. arm-linux gcc 指针 取值,GCC存储的字符串常量以及这些指针映射的位置在哪里?

    当我编译和我的Linux x86_64的机器,由GCC编译于下面的C程序运行:GCC存储的字符串常量以及这些指针映射的位置在哪里? #include int main(void) { char *p1 ...

  4. 三种遍历 list对象从而选择性取值的方式

    三种遍历 list对象从而选择性取值的方式 在项目开发过程中,经常性的遇到需要遍历list,然后取值的情况,在这里总结一下,以便复用. 如图: 在web开发过程中,经常要查询数据,然后查询到的数据往往 ...

  5. C++ 笔记(14)— 指针(指针声明、取地址、取值、new/delete、NULL指针、指针运算、指针数组、数组指针、指针传递给函数、从函数返回指针)

    1. 声明指针 指针是一个变量,其值为另一个变量的地址,即,内存位置的直接地址.就像其他变量或常量一样,您必须在使用指 针存储其他变量地址之前,对其进行声明. 指针变量声明的一般形式为: type * ...

  6. 【C 语言】数组 ( 数组取值操作 | array[i][j] 用法 等价于 *( *(array = i) + j ) 用法 | 下标操作到指针操作演化过程 )

    文章目录 一.数组取值操作方法 二.一维数组取值 下标操作到指针操作 演化过程 三.二维数组取值 下标操作到指针操作 演化过程 一.数组取值操作方法 给定一个二维数组 : int array[2][3 ...

  7. 变量与指针、取值符与取地址符

    变量与指针.取值符与取地址符 一.基础知识 二.实例 其他 by HPC_ZY 也是偶然,在一个项目中需要多次交换二维数组中的值,逐个操作确实耗时,就想能不能利用指针操作快速交换.成功后写此文,记录分 ...

  8. C语言指针的指针与取地址和*取值

    int n=5;//定义一个变量n int *p=&n;使用&取n首个元素的地址给p 那输出p就可以打印n的首地址. 输出*p就可以打印n的元素:5. *取值: 上面是给p加*取值符号 ...

  9. c语言中int的取值范围_c语言入门(1)

    c语言入门 C语言一经出现就以其功能丰富.表达能力强.灵活方便.应用面广等特点迅速在全世界普及和推广.C语言不但执行效率高而且可移植性好,可以用来开发应用软件.驱动.操作系统等.C语言也是其它众多高级 ...

最新文章

  1. 阿里云双12服务器和阿里云双12数据库活动又开始了
  2. form表单中,file选择图片后预览
  3. 新书上市《软件设计师考试考前冲刺预测卷及考点解析(最新版)》
  4. 一加手机回应“滤镜透视”争议:为消除担忧 暂时禁用该滤镜
  5. 讨论简书留言界面的设计
  6. php读取url连接的图片,输出到浏览器
  7. robots.txt限制些什么屏蔽内容与安全性的考虑
  8. 复制和粘贴文本时剥离格式的5种方法(MacWindows)
  9. ipad上能够编辑python_10 个可以在平板电脑上使用的 Python 编辑器
  10. Oracle 11gR2 dataguard 介绍
  11. 计蒜客蓝桥杯模拟赛---青出于蓝而胜于蓝
  12. Linux系统下安装redis
  13. Unity3D自制横版闯关游戏手册(1)
  14. 微信PC端或将支持自动登录?网友直呼好家伙
  15. 自然语言处理不属于计算机科学,自然语言处理是一门融语言学、计算机科学和什么于一体的科学...
  16. ContentProvider介绍
  17. 【UPCOJ】21185问题 H: 买二送一
  18. 使用JMETER进行REST API测试
  19. 机器学习中的模型是什么?
  20. uname -a了解

热门文章

  1. elasticsearch的join查询
  2. 一个可供中小团队参考的微服务架构技术栈
  3. quartz源码解析--转
  4. 多台Linux服务器SSH相互访问无需密码--转
  5. 图片路径上传的配置问题
  6. GMIS 2017大会杨强演讲:迁移学习的挑战和六大突破点
  7. 经验传承:谈色彩设计方法
  8. 布道微服务_05RPC远程服务调用的实现
  9. 小工匠聊架构 - 分布式缓存技术
  10. mysql 之后,装完MySQL之后的一些操作