Вам предстоит пройти долгий, длинный путь ....
Позвольте мне попробовать, если я смогу немного помочь вам в вашем путешествии по изучению языка C.
что на самом деле означает struct node *next
. Мы создаем новую структуру с именем next
, которая содержит новые данные и next
членов? Что я также не получаю, так это использование *
в next
.
struct node *next;
Этот оператор объявляет переменную с именем next
типа struct node *
, что означает next
указатель, который может указывать на адрес типа struct node
.
Например, в операторе int *p;
переменная p
имеет тип int *
, что означает, что p
является указателем, который может указывать на int
. [Для указателей, проверьте это или это или Google или обратитесь к любой хорошей книге] .
Вы когда-нибудь слышали о Само-ссылочная структура в C?
Само-ссылочная структура - это структура, в которой один из ее членов является указателем на саму структуру.
Итак, вэто объявление структуры:
-------------------------------------------------
| |
v |
struct node{ -----------
int data; | |
struct node *next; // next is a pointer to struct node, i.e. pointer to self
};
struct node
является самоссылочной структурой. [Для получения более подробной информации о проверке самоссылочной структуры это и для проверки его использования это ].
Но я неt понять две вещи: 1) Что на самом деле, например, TabNodePtr LastTab
означает? Является ли LastTab
новой структурой, которая имеет все вышеперечисленное ....
Прежде всего, внимательно прочитайте оуказатели (точнее указатель на структуру) в C.
typedef
используется для создания псевдонима для другого типа данных. [Подробнее о typedef здесь и о typedef struct здесь или ссылаться на любую хорошую книгу.]
Итак, когда вы пишете
typedef struct TabNode *TabNodePtr;
, что означает, что теперь TabNodePtr
является псевдонимом типа struct TabNode *
, и вы можете использовать TabNodePtr
для объявления переменной типа struct TabNode *
.
Итак, послеПриведенный выше оператор typedef....
, когда вы пишете
TabNodePtr xyz;
, точно такой же, как этот
struct TabNode *xyz;
В вашем коде:
TabNodePtr LastTab;
это объявляет переменную LastTab
типа struct TabNode *
, что означает LastTab
- указатель на struct TabNode
.
Итак,
struct InfoSession {
TabNodePtr FirstTab;
TabNodePtr LastTab;
TabNodePtr CurrTab;
};
точно такой же, как этот
struct InfoSession {
struct TabNode *FirstTab;
struct TabNode *LastTab;
struct TabNode *CurrTab;
};
То же самое относится и к SiteNodePtr
, который является псевдонимом struct SiteNode *
.
2) Почему мы используем указатели для членов? И не просто идти с TabNode LastTab
например? Где указатели делают различие, и мы должны добавить их?
Why do we use pointers for the members?
или Why do we use pointers?
- Это очень естественный вопросдля тех, кто не знает или очень мало знает об указателяхв Си и для большинства начинающих это тема, которая их сильно смущает.Но поверьте мне, как только вы получите правильные знания о указателях и научитесь ими пользоваться, вы никогда не вернетесь назад.Указатели - это неотъемлемо мощная программная конструкция.Чтобы понять - Why do we use pointers....
, сначала вы должны получить знания об указателях.Для начала вы можете сослаться это и это .
Счастливое обучение .... наслаждайтесь ..