Давайте представим телефонный справочник в виде структуры, то есть в структуре должна храниться вся необходимая информацию о каждом человеке — имя, адрес, номер телефона, и так далее. Синтаксис объявления структуры:
struct /*имя структуры*/ { /*переменные-члены структуры*/ };
То есть одно единственное имя структуры может объединять различные переменные, они могут отличаться даже типами данных, это могут быть как массивы, строки так и обычные переменные. К примеру, давайте рассмотрим следующее объявление структуры:
struct home { int rooms; }; struct home home1; // объявляем структуру как обычную переменную, просто вначале дописываем слово struct home1.rooms = 4; //вот так получаем доступ к переменной
Тут все предельно ясно. Давайте рассмотрим еще один пример программы:
struct database { int rowId; int name; float surname; }; int main() { struct database worker; // объявили переменную-структуру worker.rowId = 1; worker.name = Denis; worker.surname = Sukhoverkhov; }
Структура с именем database
имеет три переменные, rowId
, name
, surname
. Структуру database
можно использовать как тип данных для переменной, пример показан в строке 9. Мы создали переменную worker
типа database
. И теперь, через переменную worker
мы можем получить доступ к элементам структуры. Мы можем задать номер строки, имя и фамилию. Доступ к элементам структуры осуществляется через точку. То есть, чтобы поменять значение структуры или считать его, достаточно указать имя перемененной и через точку — элемент структуры. Вы также можете вернуть структуру в качестве возвращаемого значения функции, для этого нужно определить тип возвращаемого значения функции в качестве структурного типа. Например:
struct database functionName();
Немного подниму тему объединений — union, по сути это все та же структура, за исключением того, что все переменные занимают один и тот же объем памяти. Когда в программе объявляется union, компилятор выделяет достаточно памяти для крупнейшего типа данных в объединении. Это как огромное хранилище, в котором есть одна большая запись, все остальные — маленькие, и этим маленьким записям никогда не понадобится в полном объеме то место, которое им отводится.
Оператор точка "."
также используется и для доступа к элементам объединения — union
. В качестве последнего замечания, хочу отметить такой момент, если вы работаете со структурой через указатель, то в качестве оператора доступа к элементам структуры нужно использовать оператор ->
, вместо оператора "."
. Все остальное остается актуальным и для указателей.
#include <stdio.h> struct instance { int var; }; int main() { struct instance instance1; struct instance *ptrStruct; instance1.var = 12; ptrStruct = &instance1; // указатель на структуру printf( "%d\n", ptrStruct->var ); // работает как оператор разименования - * getchar(); }
Вот результат работы программы:
12
Если у вас возникнут какие-то вопросы, задавайте их в комментариях или на форуме.
P.S: Если у вас компьютер стал медленнее работать или объем жесткого диска резко увеличился без всякой причины, значит, скорее всего на вашей машине насобиралось очень много временных файлов. Удалить их всех вам поможет программа ccleaner, скачать её можно на этом сайте — ccleaner4you.ru. После чистки, ваш компьютер заметно станет работать быстрее, кроме того, освободится немало места на жестком диске.
Комментарии
Sergiy Vovk
Добавте в посібник:
Елементи union ніби накладаються на один одного і мають однакову адресу.
Приклад:
Одночасно можна використовувати лише один елемент union тому що зміна значення одного елементу приведе до зміни значень інших елементів.
union можна використовувати для економії пам’яті.
Mistico_Ukraine
Alex_Gates
Спасибо. Все круто понятно с примерами. Молодци идеально просто )
while (true)
{
respect (cppstudio);
}