четверг, 30 декабря 2010 г.

Структуры в C (С, Си)

Привет, с вами опять я - кодер -бывший студент
Иногда есть необходимость сгруппировать некоторые данные, допустим вы делайте программу, которая подбирает лучшую девушку 2011.

Конечно можно использовать ряд массивов, например char NameGirl[10]={"Sveta","Anja",....};int AgeGirl[10]={21,23,...} и т.д.

Но лучше использовать структуры.
Структура struct это объеденение нескольких переменных разных или однотипных в одну пачку.

Синтаксис
struct уникальное_название_вашей_структуры
{
переменные, например int age;
};

Но я не рекомендую использовать такой синтаксис, более простой способ это использовать typedef, описание структуры будет в этом случае, таким:
typedef struct
{
переменные, например int age;
} уникальное_название_tp

В чем разница? В объявлении (в функциях и как переменные),
в первом случае вы должны будете писать struct уникальное_название_вашей_структуры имя_переменной,
во-втором случае всего уникальное_название_tp имя_переменной;

Допустим:
typedef struct
{
char name[30];
short age;
char virgin;
char like_drink;
char emo;
} TS_Girl;

В Си, нет булевых типов переменных (они есть только в C++ - bool), потому используем char, но для кода на самом деле все равно, булевая переменная из C++, занимает в памяти также 1 байт, а не 1 бит - как кажется.

Теперь TS_Girl - это, что-то типа переменной и можно сделать так:
TS_Girl girl_from_work[10];
Тут мы объявили массив структур, обращение к структуре будет выглядеть так:
if (girl_from_work[0].age > 30) continue;

Обращение к членам структуры - через точку TS_Girl wounder_girl;
if (wounder_girl.emo != 0) printf("Не повезло!\n");


В чем прелесть структур - что (кроме группировки) - что данные хранятся в одном месте и последовательно друг-за другом.
Системная функция sizeof вернет размер струтуры, в моем случае sizeof(TS_Girl) вернет 35.
Можно эти данные копировать/записовать как область памяти, например write(file,(char*)&girl_from_work[i],sizeof(TS_Gril));

В некоторых (поздних)версиях С, в структурах появились функции - но это язычество, сын мой, избегай этого!
Есть классы (в C++), а есть структуры и не стоит мешать мух с котлетами.

Комментариев нет:

Отправить комментарий