Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Решение. Операции над структурами




Решение

Операции над структурами

Инициализация структур

Обращение к полям структуры

Для обращения к отдельным полям структуры в языке Си служат два оператора:

·.

· ->

Оператор. используется в том случае, когда известна переменная, имеющая тип структуры. Оператор -> при работе со структурой через указатель. Оба оператора относится к категории бинарных операторов. Эти операторы имеют следующий формат:

· <α1>. <b>.

· <α2> -> <b>.

Здесь α1 – переменная, имеющая тип структуры, α2 – указатель, установленный на объект типа структуры, а b - поле структуры.

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

#define MLEN 81

struct person_salary

{

char fio[MLEN];

double salary;

};

//…

struct person_salary employee;

struct person_salary* p = &employee;

Тогда можно написать следующий программный код, содержащий обращения к полям объекта employee.

strcpy(employee.fio, “Petrov Ivan Ivanovich”);

puts(p->fio);

p->salary = 10000;

printf(“%10.3f\n”, employee.salary);

 

Структура может быть инициализирована во время своего определения. Ограничимся примером.

#define MLEN 81

struct person_salary

{

char fio[MLEN];

double salary;

};

 

int main(void)

{

struct person_salary new_person = {

“Ivanov I.I”,

};

// …

}

Со структурой как со структурной переменной можно выполнять следующие операции:

· присваивание,

· передавать в функцию по значению,

· передавать в функцию с использованием указателя,

· структуру можно использовать как значение, возвращаемое функцией.

Остальные операции со структурами выполняются по компонентно.

Пример 1. Присваивание структур.

Постановка задачи. Имеются две структуры person1 и person2. Требуется скопировать поля структуры person1 в структуру person2.

#define MLEN 81

struct person_salary

{

char fio[MLEN];

double salary;

};

 

int main(void)

{

struct person_salary person1 = {

“Ivanov I.I”,

};

 

struct person_salary person2 = {

“Petrov P.P”,

 

};

person2 = peson1;

// …

}

 

После выполнения этого фрагмента программного кода все поля структуры person1 оказались скопированными в структуру person2.

Пример 2. Возврат функцией значения типа структуры.

Постановка задачи. Заданы значения полей. Требуется сформировать структуру (построить структурную переменную) структуру.

#define MLEN 81

struct person_salary

{

char fio[MLEN];

double salary;

};

 

// Прототип функции, которая формирует структуру

struct person_salary form_struct(const char* fio, double
salary);

int main(void)
{
struct person_salary = form_struct(“Petrov P.P.”, 20000);
//…

}

struct person_salary form_struct(const char* fio, double
salary)
{
struct person_salary temp;
strcpy(temp.fio, fio);
temp.salary = salary;
return temp;
}

 

Пример 3. Использование указателей для передачи структур в качестве аргументов функций.

Постановка задачи. Выполнить обмен значений двух структур.

Решение

#define MLEN 81

struct person_salary

{

char fio[MLEN];

double salary;

};

 

 

void swap_struct(struct person_salary* p1,
struct person_salary* p2);

int main(void)
{
struct person_salary person1, person2;
//…

swap_struct(&person1, &person2);
//…
}

void swap_struct(struct person_salary* p1,
struct person_salary* p2)
{
struct person_salary temp = *p1;
*p1 = *p2;
*p2 = temp;
}

 




Поделиться с друзьями:


Дата добавления: 2014-01-06; Просмотров: 328; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.009 сек.