当前位置:  开发笔记 > 编程语言 > 正文

什么是C中的前向参考?

如何解决《什么是C中的前向参考?》经验,为你挑选了3个好方法。

C中关于指针的前向引用是什么?

我能举个例子吗?



1> strager..:

有关前向参考,请参阅此页面.我没有看到前向引用如何与指针和其他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 {
    // ...
};

我认为这是你在处理指针和前向声明时所要求的.



2> 小智..:

我认为关于指针的"前向引用"意味着这样的事情:

struct MyStruct *ptr; // this is a forward reference.

struct MyStruct
{
  struct MyStruct *next; // another forward reference - this is much more useful
  // some data members
};

指针在它指向的结构定义之前声明.

编译器可以避免这种情况,因为指针存储了一个地址,你不需要知道该地址是什么来为指针保留内存.



3> Vincent Robe..:

前向引用是指声明类型但未定义类型.

它允许您使用指针类型(或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 ...
}

推荐阅读
小色米虫_524
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有