Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Операции над структурными переменнымиСодержание книги
Поиск на нашем сайте
Поля структурной переменной могут использоваться в выражениях и операторах в контексте их типа, в том числе и операторах ввода-вывода. Так же, как и для обычных операндов, действуют правила преобразования типов при смешивании операндов-полей разных типов. Например:
if (strcmp(first_book.name, "Mitchel M.") == 0) ……; if(first_book.year % 4==0) ……; first_book.name[0] = tolower(first_book.name[0]); strcpy (first_book. name, "Mitchel M."); //поле-строка получает значение!!!!! strcpy (first_book. title, "Unesennie vetrom"); cin >> child_book.title; //поле- строка получает значение!!!!! first_book. year = 2007; cin >> first_book. price;
Определить адрес структурной переменной или ее поля можно обычной операцией взятия адреса. Непосредственно сравнивать две структурные переменные (даже одного типа) нельзя. Сравнивать можно только члены структур. Например: struct { int a; int b; } v1, v2; if ((v1. a == v2. a) && (v1. b == v2. b)) cout << “переменные равны”; К структурным переменным, определенным с помощью одного и того же шаблона, применим оператор присваивания.!!! После его выполнения значения полей структурных переменных будут равны. Например: first_book = child_book; first_book = child_book = dog_book;
#include <windows.h> RECT r1, r2 = { 2, 6, 4, 2 }, r3; r1.left = 1; r1.top = 5; r1.right = 3; r1.bottom = 1; r3 = r1; cout<< r3.left << endl;
При присваивании, байты памяти, выделенныеправой структурной переменной, копируются в память, выделенную компилятором для структурной переменной этого же типа, стоящей слева. Это так называемое поверхностное копирование. НО!!! Поверхностное копирование полей-указателей может стать источником ошибок в дальнейшей работе. Если в структуре есть поля-указатели, то после присваивания будет существовать больше одной структурной переменной, поля которой указывают на одну и ту же область памяти. !!!
Если два структурных типа «закольцованы» ( поля одного структурного типа объявляются через другой структурный тип и наоборот ): struct A { B *pb;}; struct B { A *pa;};
то допустимо использовать предварительное неполное определение любого из типов: struct B; // предварительное неполное определение типа B; struct A { B *pb;}; struct B { A *pa;};
В данном случае предварительное неполное определение структурного типа B допустимо использовать в определении структурного типа A, так как определение указателя pb на структуру типа B не требует сведений о размере структуры типа B.
При обращении к элементам структуры с помощью указателя нужно учитывать приоритет операций. Для изменения порядка действий необходимо использовать явные скобки. Выражение (* ptr_ date). year представляет собой обращение к элементу year структуры, связанной с указателем ptr_ date. Нельзя опускать скобки в этом выражении, так как приоритет операции точка (.) выше, чем операции доступ по указателю (*). Для вложенных структур доступ к полям структурной переменной через указатель реализуется следующим образом: p->q->mem, что равносильно ( p->q ) -> mem (поскольку операции -> и. выполняются слева направо). Аналогично, выражение
Массив структур Определим шаблон структуры data, содержащий информацию о дне рождения (год, месяц, день), и структурные переменные masha_data и sasha_data с информацией о днях рождения Маши и Саши: struct data { int year; //год unsigned mes; //месяц unsigned day; //день }; data masha_data, sasha_data;
Тогда: masha_data. day //доступ к полю «день рождения» Маши sasha_data. year //доступ к полю «год рождения» Саши
masha_data (вся информация о дате рождения Маши), sasha_data (вся информация о дате рождения Саши). Для данного структурного типа опишем массив структур person_data: data person_data [20]; Тогда: person_data – информация о датах рождения всей группы (массива людей из двадцати человек); person_data[i] – информация о дате рождения (i+1) – го члена группы (i – ый элемент массива); person_data[i]. mes – месяц рождения (i+1) – го члена группы; Определим структурный тип (шаблон структуры) mash с информацией о владельце автомобиля: номер, марка автомобиля, фамилия и адрес владельца. struct Auto {int nomer; //номер автомобиля char marka[20]; //марка автомобиля char fio[40]; //фамилия владельца char adres[60] //адрес владельца }; Auto mers, volvo, alfa_r [5], *mazda,person_list [20]; // определение структурных переменных mers. marka –доступ к полю «марка» автомобиля mers mers – вся информация о владельце автомобиля mers volvo. fio[0] – первая буква фамилии владельца автомобиля volvo alfa_ r [1]. adres[0] – первый символ адреса второго элемента массива владельцев alfa _ r person_ list – информация о всех владельцах автомобилей (массив из двадцати наборов данных); person_ list[ i] – информация о владельце (i+1) –го автомобиля (i –ый элемент в наборе данных); person_ list[ i]. fio – фамилия владельца (i+1) –го автомобиля; person_ list[ i]. fio[ j] –j-ая буква в фамилии владельца (i+1) –го автомобиля Расположение массива структур в памяти:
person_list [1]. fio person_list [i-1].fio[j] Массив структурных переменных можно описать и следующим образом: struct { char name[20]; char title[44]; int year; float price; } books[25]; Тогда к полю year в i-ом элементе массива структур books можно обратиться следующим образом: books[i]. year =2007; (*(books+i)). year =2007; (books+i)->year =2007;
|
||||||||||||||||||||||
Последнее изменение этой страницы: 2021-12-15; просмотров: 48; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.129.216.248 (0.005 с.) |