Структуры и классы в C

Просматривала видеокурс C# Essential (кстати советую, очень познавательный курс для начинающих), где Александр Шевчук на одном из своих видеоуроков раскрыл тему структур и их разновидностей в контексте языка C#, что с ними можно делать, чего делать нельзя и так далее. Впринципе тема с классами в C# ясна и понятна, особых сложностей она не вызывает.

Сейчас понемногу изучаю язык С , и вот недавно узнала, что структуры в С представляют собой нечто совершенно иное чем в вышеупомянутом С#. Мол там отсутствуют определённые ограничения, да и вообще сравнение класса и структуры в С абсолютным образом отличается от сравнения классов и структур в C#.

Отсюда следующие вопросы:

1. Чем структура в C предметно отличается от структуры в C#? Только по сути, без учёта синтаксиса или каких-то очевидных особенностей языков.

2. Сравните пожалуйста класс и структуру в языке C .

3. Если структуры в С действительно не имеют таких ограничений как в С#, то зачем собственно они были введены, эти ограничения? Почему бы не оставить всё как есть?

В C# структура очень ограничена, при чём как в плане расположения в памяти (как value тип, она может располагаться только в стеке), так и в общем использовании (запрет наследования и тд). Об этом Вы уже сами всё слышали и видели в видеоуроке Шевчука. Уверен, он доступно пояснил что да как, касательно структур в C#, так что не вижу смысла зацикливаться на них.

Ответ на 3-й вопрос: для безопасности. По сравнению с С , С# - это язык очень ограниченный, и, за счёт этого, безопасный в использовании. (аналогия: С - это заряженный пистолет и отсутствие предохранителя, C# - это заряженный пистолет на предохранителе с бронежелетом на теле).

Итак, структуры в С . В этом языке программирования ключевое слово struct имеет очень много общего (точнее говоря, почти всё) с ключевым словом class. Их даже можно считать "братьями", если конечно ключевые слова в программировании вообще можно так называть...

В С структура - это то же самое что и класс, за исключением одной детальки: у структуры все члены по-умолчанию public. Из этого следует, что если всегда явно указывать модификаторы доступа к членом класса, то разницы между структурой и классом в С не будет вообще.

У вас может возникнуть вопрос, зачем же тогда языку 2 абсолютно идентичных ключевых слова, между которыми даже нет явной разницы? Ответ как никогда прозаичен: так сложилось исторически, не более того. С был спроектирован как расширяющий язык С, и создатель С решил ввести ключевое слово class что б лишний раз подчеркнуть новые расширенные функциональные возможности своего детища.

Если вам интересно изучить язык С , то искренне рекоммендую вам просмотреть видеокурсы, посвящённые С на канале itvdn или прочитать книгу "Cpp за 21 день". И там и там можно найти много чего интересного, так что советую сначала пройти курсы, для лучшего понимания, а уже потом предметно почитать книгу, если будет желание поглубже понять язык.