Можете ли вы напечатать ранее определенный оператор typedef? - PullRequest
2 голосов
/ 13 октября 2019

Мне поручили работать над каким-то кодом, но мне заранее дали его часть. Он включает в себя эту часть кода:

typedef int ElementType;

struct Node;
typedef struct Node *PtrToNode;
typedef PtrToNode List;
typedef PtrToNode Position;

struct Node {
    ElementType Element;
    Position Next;
    Position Previous;
};

Насколько я понимаю,

  1. Вместо записи int мы можем теперь написать ElementType, чтобы определить значение как целое число. (Путаница # 1)
  2. Мы определили структуру под названием Node. (Я не уверен, почему это не было определено здесь).
  3. Мы typedef PtrToNode как указатель структуры с именем Node.
  4. Мы typedef Перечислим как PtrToNote. Это должно означать, что List также является указателем на структуру с именем Node. Этот указатель называется List. (Путаница № 2)
  5. Аналогично номеру 4, но этот называется Позицией.
  6. Мы определяем, как будет создаваться структура. В этом случае элемент должен быть int, как в нашем предыдущем определении. Следующие и Предыдущие должны быть указателями позиции? Однако, если бы я изменил Позицию со списком, как это повлияло бы на код?

Может кто-нибудь объяснить мне пункты 1, 2, 4 и 6? Я правильно понимаю код?

1 Ответ

1 голос
/ 13 октября 2019

Вместо записи int мы можем теперь написать ElementType, чтобы определить значение как целое число. (Путаница # 1)

Это правильно - например:

int a = 50;

Теперь эквивалентно

ElementType a = 50;

Мы определилиструктура называется Node. (Я не уверен, почему это не было определено здесь).

Это (вперед) объявление структуры с именем Node, а не определение структуры

Мы вводим определение PtrToNode в качестве указателя структуры с именем Node.

Ваше понимание здесь также верно. Таким образом, следующее эквивалентно:

struct Node *x;
PtrToNode x;

Мы вводим определение List как PtrToNote. Это должно означать, что List также является указателем на структуру с именем Node. Этот указатель называется List. (Путаница № 2)

List и PtrToNode представляют один и тот же тип - все следующие примеры делают одно и то же:

struct Node *x;
PtrToNode x;
List x;

По аналогии с числом4, но это называется Position.

Correct.

Мы определяем, как будет создаваться структура. В этом случае элемент должен быть int, как в нашем предыдущем определении. Следующие и Предыдущие должны быть указателями позиции? Однако, если бы я изменил Позицию со списком, как бы это повлияло на код?

Это определяет структуру Node. Замена Position на List не повлияет на код. Для двух типов совместимы.

...