以星号结尾的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修改变量的范围<代码>静态
也可以根据您需要完成的任务来使用。