c++ - *(int*)(buffer) 是什么意思?

标签 c++ c pointers

在我正在阅读的 C++ 代码中,发现了以下内容。 谁能帮我理解以下语句的作用?

char buffer[4096];
// some code
int size = *(int*)(buffer);

最佳答案

char buffer[4096];//this is an array of 4096 characters
// some code

int size = *(int*)(buffer);

会将(衰减的)字符指针(即buffer)转换为整数指针。然后取消引用它以获得一个整数值。您从中获得的整数值将由 buffer 数组的前 4 个字符值组成,假设 int 的大小在您的机器中为 4 个字节,或者通常会由 sizeof(int) 个字符组成。

换句话说,buffer 数组的第一个sizeof(int) 字符的内存表示将被视为表示单个整数值,因为现在它由一个整数指针指向,当取消引用该整数指针时,它将存储在 size 整数变量中。

话虽这么说,正如在评论部分反复声明的那样,这段代码是不安全的。想到的一件事是,一些 CPU 有严格的对齐要求(参见 this answer ),在这种情况下不能保证 buffer 数组的第一个元素的地址符合整数的对齐要求导致这些 CPU 中的未定义操作。

请参阅@Lundin 的回答,了解此代码不安全且可能无法为您提供所需结果的更多原因。

关于c++ - *(int*)(buffer) 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37154590/

相关文章:

c++ - C/C++ : getting pointer to function without function name

java - 我可以封装同一个类的对象之间的成员吗?

c++ - 从 vector 初始化数组

c++ - OpenGL 立体 : alternating between left and right textures

c++ - 为什么不能引用指针以用于常量分配字符串文字

谁能解释一下下面的c代码吗?

c++ - 制作库的直通接口(interface)

c - malloc 调用 realloc,然后崩溃

c - 如何在第一个空格处拆分字符串

无法使用我认为应该是编译时常量的内容来初始化静态数组