在我正在阅读的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;