Какой смысл ставить указатель после структуры данных?

Я новичок в программировании на C и только что узнал о структурах. Мой вопрос в том, какой смысл ставить указатели после определения структуры? как в этом примере (это мой старший код, кстати):

struct lecturer { 
    char Lecturer_ID[40];
    char Lecturer_Passport[40];
    char Lecturer_Name[40];
    char Lecturer_Password[40];
    struct lecturer *next; 
} *start, *curr;

который обычно используется для реализации en.wikipedia.org/wiki/Linked_list

Gilles Gouaillardet 25.05.2018 04:52

Дело в том, что вы просто объявляете два указателя на тип struct lecturer с именами start и curr. Вы можете удалить их там (что является хорошей идеей - вам не нужны глобальные объявления (предположительно), а затем объявить struct lecturer *start, *curr; в main().

David C. Rankin 25.05.2018 06:36

Хотя Гиллесс предположил весьма правдоподобно, почему вы не спросите автора этого кода или не прочитаете документацию по нему? (Я надеюсь, что «это мой старший код» не означает, что вы являетесь автором кода, которого сами не понимаете; не говоря уже о попытках получить с его помощью какую-либо степень ...)

Yunnosch 25.05.2018 08:34
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
3
87
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Это связано с темой «Связанный список».

Представьте, что у вас есть неизвестное количество лекторов, которых вам будут читать во время выполнения. Таким образом, вам придется динамически выделять место в памяти каждый раз, когда потребуется обработать новую запись лектора.

В этом случае вы будете использовать указатель «следующий» для создания связи между этими же типами структурированных данных.

Тем не менее, вы можете найти много более подробных (и лучших) объяснений на этом сайте, на YouTube и т. д. Просто выполните поиск по «Связанному списку».

Опубликованный вами код определяет как тип struct lecturer, так и две переменные start и curr с указателем типа на struct lecturer. Для ясности это можно было бы записать как отдельные определения:

struct lecturer { 
    char Lecturer_ID[40];
    char Lecturer_Passport[40];
    char Lecturer_Name[40];
    char Lecturer_Password[40];
    struct lecturer *next; 
};

struct lecturer *start;
struct lecturer *curr;

Комбинированное определение требуется, если struct не помечен и не определен через typedef.

Другие вопросы по теме