C中关于指针的前向引用是什么?
我能举个例子吗?
有关前向参考,请参阅此页面.我没有看到前向引用如何与指针和其他PoD类型不同.
请注意,您可以转发声明类型,并声明指向该类型的指针的变量:
struct MyStruct; struct MyStruct *ptr; struct MyStruct var; // ILLEGAL ptr->member; // ILLEGAL struct MyStruct { // ... }; // Or: typedef struct MyStruct MyStruct; MyStruct *ptr; MyStruct var; // ILLEGAL ptr->member; // ILLEGAL struct MyStruct { // ... };
我认为这是你在处理指针和前向声明时所要求的.
我认为关于指针的"前向引用"意味着这样的事情:
struct MyStruct *ptr; // this is a forward reference. struct MyStruct { struct MyStruct *next; // another forward reference - this is much more useful // some data members };
指针在它指向的结构定义之前声明.
编译器可以避免这种情况,因为指针存储了一个地址,你不需要知道该地址是什么来为指针保留内存.
前向引用是指声明类型但未定义类型.
它允许您使用指针类型(或C++的引用),但不能声明变量.
这是一种向编译器说存在某种东西的方法
假设您在Plop.h中定义了Plop结构:
struct Plop { int n; float f; };
现在,您要添加一些适用于该结构的实用程序函数.你创建另一个文件PlopUtils.h(假设你不能改变Plop.h):
struct Plop; // Instead of including Plop.h, just use a forward declaration to speed up compile time void doSomething(Plop* plop); void doNothing(Plop* plop);
现在,当你实现这些功能,您将需要结构定义,所以你需要在你的Plop.h文件PlopUtils.cpp:
#include "PlopUtils.h" #include "Plop.h" // now we need to include the header in order to work with the type void doSomething(Plop* plop) { plop->n ... } void doNothing(Plop* plop); { plop->f ... }