以星号结尾的C结构

以星号结尾的C结构,c,pointers,struct,C,Pointers,Struct,我看了这张照片,发现上面有声明 struct edge { int x; int y; int weight; struct edge *link; }*front = NULL; 这究竟意味着什么?是否可以创建一个结构,它也是一个名为front的指针,它为NULL…?它是一个指向结构的指针,并且是一个名为struct edge的新类型的声明。结构只是另一个C类型,因此,它用来定义的变量可以创建为普通实例或指针: int a, *pA=NULL;

我看了这张照片,发现上面有声明

struct edge
{
      int x;
      int y;
      int weight;
      struct edge *link;
}*front = NULL;

这究竟意味着什么?是否可以创建一个结构,它也是一个名为front的指针,它为NULL…?

它是一个指向结构的指针,并且是一个名为
struct edge
的新类型的声明。结构只是另一个C类型,因此,它用来定义的变量可以创建为普通实例或指针:

int a, *pA=NULL; //normal instance, pointer instance

struct edge
{
      int x;
      int y;
      int weight;
      struct edge *link;
}sEdge, *front = NULL; //normal instance, pointer instance
而且,与任何指针变量一样,在安全使用之前,需要将指针指向自有内存:(示例)

编辑回答评论中的问题:
这个小示例不会抛出错误或警告。(在上面编辑您的问题,或者更好的是,发布另一个问题,显示您看到的内容的详细信息。)


当你写下以下内容时,也许这会让你更加轻松:

struct edge
{
      int x;
      int y;
      int weight;
      struct edge *link;
};
struct edge
{
      int x;
      int y;
      int weight;
      struct edge *link;
} edgeObject;
您的意思是:我正在创建struct edge,我将使用它通过键入以下内容来定义此结构的对象:

struct edge edgeObject;
但当你写作时:

struct edge
{
      int x;
      int y;
      int weight;
      struct edge *link;
};
struct edge
{
      int x;
      int y;
      int weight;
      struct edge *link;
} edgeObject;
您的意思是:我正在创建struct edge,同时定义类型为
struct edge
的edgeObject。 这允许您直接使用已定义的对象:

edgeObject.x = 0;

回到你的例子,你会说:我在创建结构边缘,同时定义指向结构前面的指针,该指针设置为空。

语法与
int*x相同。只是存在一个
struct
类型而不是
int
。一个
struct
只是另一种类型的变量。因此,类似于
int*a=NULL,可以创建为
结构名称{…}*tag=NULL
这有点令人困惑,或者严格地说是错误的,因为它也是一种新类型的声明,名为
struct edge
。我认为这是“给定的”@unwind,正如否决票所示,我错了。很抱歉我现在更新了答案,希望有所改进,谢谢!在main()方法中,同一程序声明'struct edge tree[10];'其中我的编译器抛出错误“数组类型的元素类型不完整”。那么如何初始化这个变量呢?为此,我们需要看到更多的代码;这在或中都不会发生。@VassilisDe-我已经完全包含了您在上面的编辑中描述的内容,当我使用
C99
编译器规则进行编译时,我没有收到任何编译器警告或错误。也许我做的不对……我为接口和函数实现保留了单独的文件。我从main中排除了声明结构的头文件,但是编译器现在抱怨称twice@VassilisDe-警告是否类似于:乘法定义符号?如果是这样的话,您确实在多个地方定义了它。查找并使用
extern
modifier修改变量的范围<代码>静态
也可以根据您需要完成的任务来使用。