【c++】13.必须用指针取值的情况.md
有时候我们会弄不清什么时候用指针,什么时候不用指针。我习惯性是不用指针的,因为我自己用不好指针,可能出现某些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相关推荐
- 【C 语言】一级指针 易犯错误 模型 ( 判定指针合法性 | 数组越界 | 不断修改指针变量值 | 函数中将栈内存数组返回 | 函数间接赋值形参操作 | 指针取值与自增操作 )
文章目录 一.判定指针合法性 二.数组越界 三.不断修改指针变量值 四.函数中将栈内存数组返回 五.函数间接赋值形参操作 六.指针取值与自增操作 一.判定指针合法性 判定指针合法性时 , 必须进行如下 ...
- 初学 Delphi 嵌入汇编[13] - 地址参数用 [] 取值
为什么80%的码农都做不了架构师?>>> //关于地址参数(var/out) function Fun(var x,y: Integer): Integer; asmmov e ...
- arm-linux gcc 指针 取值,GCC存储的字符串常量以及这些指针映射的位置在哪里?
当我编译和我的Linux x86_64的机器,由GCC编译于下面的C程序运行:GCC存储的字符串常量以及这些指针映射的位置在哪里? #include int main(void) { char *p1 ...
- 三种遍历 list对象从而选择性取值的方式
三种遍历 list对象从而选择性取值的方式 在项目开发过程中,经常性的遇到需要遍历list,然后取值的情况,在这里总结一下,以便复用. 如图: 在web开发过程中,经常要查询数据,然后查询到的数据往往 ...
- C++ 笔记(14)— 指针(指针声明、取地址、取值、new/delete、NULL指针、指针运算、指针数组、数组指针、指针传递给函数、从函数返回指针)
1. 声明指针 指针是一个变量,其值为另一个变量的地址,即,内存位置的直接地址.就像其他变量或常量一样,您必须在使用指 针存储其他变量地址之前,对其进行声明. 指针变量声明的一般形式为: type * ...
- 【C 语言】数组 ( 数组取值操作 | array[i][j] 用法 等价于 *( *(array = i) + j ) 用法 | 下标操作到指针操作演化过程 )
文章目录 一.数组取值操作方法 二.一维数组取值 下标操作到指针操作 演化过程 三.二维数组取值 下标操作到指针操作 演化过程 一.数组取值操作方法 给定一个二维数组 : int array[2][3 ...
- 变量与指针、取值符与取地址符
变量与指针.取值符与取地址符 一.基础知识 二.实例 其他 by HPC_ZY 也是偶然,在一个项目中需要多次交换二维数组中的值,逐个操作确实耗时,就想能不能利用指针操作快速交换.成功后写此文,记录分 ...
- C语言指针的指针与取地址和*取值
int n=5;//定义一个变量n int *p=&n;使用&取n首个元素的地址给p 那输出p就可以打印n的首地址. 输出*p就可以打印n的元素:5. *取值: 上面是给p加*取值符号 ...
- c语言中int的取值范围_c语言入门(1)
c语言入门 C语言一经出现就以其功能丰富.表达能力强.灵活方便.应用面广等特点迅速在全世界普及和推广.C语言不但执行效率高而且可移植性好,可以用来开发应用软件.驱动.操作系统等.C语言也是其它众多高级 ...
最新文章
- 阿里云双12服务器和阿里云双12数据库活动又开始了
- form表单中,file选择图片后预览
- 新书上市《软件设计师考试考前冲刺预测卷及考点解析(最新版)》
- 一加手机回应“滤镜透视”争议:为消除担忧 暂时禁用该滤镜
- 讨论简书留言界面的设计
- php读取url连接的图片,输出到浏览器
- robots.txt限制些什么屏蔽内容与安全性的考虑
- 复制和粘贴文本时剥离格式的5种方法(MacWindows)
- ipad上能够编辑python_10 个可以在平板电脑上使用的 Python 编辑器
- Oracle 11gR2 dataguard 介绍
- 计蒜客蓝桥杯模拟赛---青出于蓝而胜于蓝
- Linux系统下安装redis
- Unity3D自制横版闯关游戏手册(1)
- 微信PC端或将支持自动登录?网友直呼好家伙
- 自然语言处理不属于计算机科学,自然语言处理是一门融语言学、计算机科学和什么于一体的科学...
- ContentProvider介绍
- 【UPCOJ】21185问题 H: 买二送一
- 使用JMETER进行REST API测试
- 机器学习中的模型是什么?
- uname -a了解