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