
- •Конструкция else if
- •Рассмотрим интересные условные выражения с использование логических операторов.
- •Циклы for, while и do while в языке c
- •Функции в языке программирования c
- •Указатели в c
- •Что такое указатели и зачем они нужны?
- •Объявление указателя, получение адреса переменной
- •Выделение памяти в Си (функция malloc)
- •Динамическое выделение памяти в c
- •Выделение памяти в Си (функция malloc)
- •Структуры в языке с
- •Массивы в c (часть 1)
Структуры в языке с
В программировании иногда бывает удобно использовать одно имя для обозначения группы переменных, как правило, все эти переменные — родственные. Структуры предоставляют возможность хранения большого количества различных значений, объединенных одним общим названием. Это делает программу более модульной, что в свою очередь позволяет легко изменять код, потому что он становится более компактным. Структуры, как правило, используют тогда, когда в программе есть много данных и их нужно сгруппировать вместе — например, такие данные могут использоваться для хранения записей из базы данных.
Давайте представим телефонный справочник в виде структуры, то есть в структуре должна храниться вся необходимая информацию о каждом человеке — имя, адрес, номер телефона, и так далее. Синтаксис объявления структуры:
1 2 3 |
struct /*имя структуры*/ { /*переменные-члены структуры*/ }; |
То есть одно единственное имя структуры может объединять различные переменные, они могут отличаться даже типами данных, это могут быть как массивы, строки так и обычные переменные. К примеру, давайте рассмотрим следующее объявление структуры:
struct home {
int rooms;
};
struct home home1; // объявляем структуру как обычную переменную, просто вначале дописываем слово struct
home1.rooms = 4; //вот так получаем доступ к переменной
Тут все предельно ясно. Давайте рассмотрим еще один пример программы:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
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 мы можем получить доступ к элементам структуры. Мы можем задать номер строки, имя и фамилию. Доступ к элементам структуры осуществляется через точку. То есть, чтобы поменять значение структуры или считать его, достаточно указать имя перемененной и через точку — элемент структуры. Вы также можете вернуть структуру в качестве возвращаемого значения функции, для этого нужно определить тип возвращаемого значения функции в качестве структурного типа. Например:
1 |
struct database functionName(); |
Немного подниму тему объединений — union, по сути это все та же структура, за исключением того, что все переменные занимают один и тот же объем памяти. Когда в программе объявляется union, компилятор выделяет достаточно памяти для крупнейшего типа данных в объединении. Это как огромное хранилище, в котором есть одна большая запись, все остальные — маленькие, и этим маленьким записям никогда не понадобится в полном объеме то место, которое им отводится. Оператор точка "." также используется и для доступа к элементам объединения — union. В качестве последнего замечания, хочу отметить такой момент, если вы работаете со структурой через указатель, то в качестве оператора доступа к элементам структуры нужно использовать оператор ->, вместо оператора ".". Все остальное остается актуальным и для указателей.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#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(); } |
Вот результат работы программы:
CppStudio.com
12
Если у вас возникнут какие-то вопросы, задавайте их в комментариях или на форуме.
#