以星号结尾的C结构

时间:2018-06-04 17:55:38

标签: c pointers struct

我正在看这个example,我发现有声明

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

这究竟意味着什么?是否可以创建一个结构,该结构也是名称前面的指针,它是NULL ...?

3 个答案:

答案 0 :(得分:4)

指向结构的指针和名为struct edge的新类型的声明

答案 1 :(得分:4)

struct只是另一种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

并且,与任何指针变量一样,需要在可以安全使用之前指向拥有的内存:(示例)

int main(void)
{

    // both variable types are handled the same way... 

    pA = &a; //point pointer variable to normal instance of `int a`
    front = &sEdge;//point pointer `front` to instance of 'struct edge'

    //allocate memory, resulting in assigned address with associated memory.
    pA = malloc(sizeof(*pA));
    front = malloc(sizeof(*front)); 
    ...

编辑 在评论中回答问题:
这个小例子不会引发错误或警告。 (编辑上面的问题,或者更好的是,发布另一个问题,显示您所看到的细节。)

struct edge
{
      int x;
      int y;
      int weight;
      struct edge *link;
}*front = '\0';

int main(void)
{
    struct edge tree[10];

    return 0;
}

答案 2 :(得分:2)

当你写作时,也许这会增加一些亮点:

struct edge
{
      int x;
      int y;
      int weight;
      struct edge *link;
};

你是说:我是creatig struct edge,我将用它来定义这个结构的对象,输入:

struct edge edgeObject;

但是当你写:

struct edge
{
      int x;
      int y;
      int weight;
      struct edge *link;
} edgeObject;

您说的是:我正在创建结构边缘,同时我定义类型为struct edge的edgeObject。 这允许您直接使用该对象,因为它已经定义:

edgeObject.x = 0;

回到你的例子,你要说的是:我正在创建结构边缘,同时我是定义指向该结构front的指针为NULL。