C структура, которая заканчивается звездочкой - PullRequest
0 голосов
/ 04 июня 2018

Я смотрел на этот пример и обнаружил, что существует объявление

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

Что это на самом деле означает?Можно ли создать структуру, которая также является указателем с именем front и имеет значение NULL ...?

Ответы [ 3 ]

0 голосов
/ 04 июня 2018

Структура - это просто еще один тип Си, поэтому переменные, которые он использует для определения, могут быть созданы как обычные экземпляры или указатели:

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;
}
0 голосов
/ 04 июня 2018

Может быть, это добавило бы больше света, когда вы напишите:

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

Вы говорите: я создаю структуру края, которую я буду использовать для определения объектов этогоstruct, набрав:

struct edge edgeObject;

Но когда вы пишете:

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

Вы говорите: я создаю struct edge и в то же время я определяю edgeObject типа struct edge.И это позволяет вам использовать этот объект напрямую, как он уже определен:

edgeObject.x = 0;

Итак, возвращаясь к вашему примеру, вы говорите: я создаю ребро структуры и в то же время я определяя указатель на эту структуру front, которая установлена ​​в NULL.

0 голосов
/ 04 июня 2018

Это указатель на структуру и объявление нового типа с именем struct edge.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...