c – *(int *)(缓冲区)是什么意思?

前端之家收集整理的这篇文章主要介绍了c – *(int *)(缓冲区)是什么意思?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在我正在阅读的c代码中,发现了以下内容.
任何人都可以帮助我理解以下陈述的作用吗?
char buffer[4096];
// some code
int size = *(int*)(buffer);

解决方法

TL; DR:这段代码很糟糕,忘了它并继续前进.

(缓冲区)这个括号表示程序员对自己的编程能力不安全.

由于缓冲区是一个字符数组,因此使用标识符缓冲区可以为您提供指向第一个元素的指针:char指针.

(int *)这是一个转换,将char指针转换为int指针.

*获取该整数指针的内容,结果存储在整数大小中.

请注意,此代码完全不安全.许多指针转换会调用定义不明确的行为.可能存在对齐问题.可能存在指针别名问题(Google“严格别名规则”).此特定代码也依赖于endianess,这意味着它要求字符数组的内容具有给定的字节顺序.

总的来说,在执行此类操作时,使用诸如int或char(可能是signed)之类的签名类型没有任何意义.特别是,char类型非常有问题,因为它具有实现定义的签名,应该避免.请使用unsigned char或uint8_t.

稍差的代码看起来像这样:

#include <stdint.h>

uint8_t buffer[4096];
// some code
uint32_t size = *(uint32_t*)buffer;

猜你在找的C&C++相关文章