Разница между этими 2 объявлениями структур в C - PullRequest
1 голос
/ 14 апреля 2020

Я работаю над этим проектом для колледжа, и они дали мне пример кода, который можно использовать при объявлении структуры, другой - как я объявил его с информацией о PowerPoints и другими учебными материалами.

Это код, который они мне дали:

typedef struct sala local, *plocal;
struct sala {
    int id;
    int capacidade;
    int liga[3];
};

Это код другой структуры, которую я сделал:

typedef struct pessoa {
    char id[15];
    int idade;
    char estado;
    int dias;
} pessoa;

Может кто-нибудь объяснить мне разницу?

В моем редакторе кода "local" и "* local" отображаются синим цветом. (Я использую Netbeans).

1 Ответ

2 голосов
/ 14 апреля 2020

Это объявление typedef

typedef struct sala local, *local;
struct sala {
    int id;
    int capacidade;
    int liga[3];
};

недопустимо, поскольку имя local объявляется дважды с разными значениями: первое - как псевдоним для типа struct sala, а второе - как псевдоним для тип struct sala *.

Это разница между первым и вторым объявлениями typedef. :)

Что касается размещения объявления typedef, то оно может быть помещено либо перед соответствующей структурой определение. вместе с определением структуры или после определения структуры.

Например

typedef struct A A;
struct A
{
    int x;
};

или

typedef struct A
{
    int x;
} A;

или

struct A
{
    int x;
};

typedef struct A A;

Существенная разница между эти объявления заключаются в том, что если вы хотите обратиться к определенной структуре внутри ее определения, то во втором и третьем случаях вы должны использовать имя типа struct A, поскольку имя определения типа A еще не было объявлено.

Для пример

typedef struct Node Node;
struct Node
{
    int x;
    Node *next;
};

но например

typedef struct Node
{
    int x;
    struct Node *next;
} Node;
...