没有定义的结构用作指针
Struct without definition used as pointer
我遇到了一些代码,看起来像是向前声明结构,但我在代码库中找不到该结构的任何定义。它似乎被当作结构被定义一样使用。有人可以解释为什么下面的代码是有效的 c++ 吗?
框架是什么类型?尺寸是多少?我不能使用 sizeof(),因为它会抱怨它是未定义的。
我正在尝试从2010年开始将一段类似的代码转换为Visual Studio 2015。reinterpret_cast演员抱怨它无法转换,因为
"reinterpret_cast":从"无符号长整型"转换为"帧*" 更大的尺寸
#include <stdio.h>
struct Frame;
int main()
{
unsigned long currentFrame = 5;
Frame* frame = reinterpret_cast<Frame*>(currentFrame);
printf("%p", frame);
}
GCC 4.9.2 用于编译此示例。
我理解错误,但不了解结构的使用方式。它默认为 int 吗?
程序行为是未定义的,因为从unsigned long
到Frame*
的转换,其中前者设置为与您可以设置的指针值无关的值不符合 http://en.cppreference.com/w/cpp/language/reinterpret_cast 中提到的可能性之一。
printf
似乎输出指针地址这一事实是这种未定义行为的表现。
Frame
是不完整的类型这一事实在这里无关紧要。除了nullptr
,一个超过标量(即单个对象或普通旧数据对象)的地址,一个超过数组的末尾,将指针类型设置为你不拥有的内存的行为也是未定义的。
由于您仅将Frame
用作指针,因此编译器不需要了解有关Frame
结构本身的任何信息。这就像使用不透明的指针指向某物而不关心指向的内容。
强制转换失败unsigned long
因为根据操作系统和数据模型(例如 LLP64 与 LP64),不能保证指针的大小相同。您应该考虑使用<stdint.h>
中的intptr_t
保证能够存储指针的所有位,但我不明白您如何需要将文字重新插入内存地址。
- 如何在 C# 中映射双 C 结构指针?
- 指针或结构的矢量
- MSVC将仅移动结构参数解释为指针
- 如何访问指针结构的成员变量?
- 如何将变量从变量传递到指针结构对象
- 如何在函数中检索指针结构
- C :变量的点地址至指针结构成员的地址
- C++指针结构不会被删除
- 初始化指针结构 - 内存中的外观
- C++指针结构和多线程
- c++中指针结构的运算符重载
- 为什么我不能转发声明指针结构?
- C# 如何定义新的指针结构
- 如何处理大型指针结构
- 我怎么能写一个函数的定义在模板类中声明返回指针结构对象
- 我如何编程指针结构或类变量在c++
- 具有指针结构的类所需的析构函数
- 为什么在非指针结构上进行类型转换会出现语法错误
- 语法:做binary_search (STL)排序向量的指针结构
- /a.检测到Glibc.out: munmap_chunk():无效指针- c++结构体的动态数组