русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

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


Дата добавления: 2014-05-02; просмотров: 730; Нарушение авторских прав


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

 

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 (поскольку операции -> и . выполняются слева направо). Аналогично, выражение
stud. birthdate. month означает (stud. birthdate). month.

 



<== предыдущая лекция | следующая лекция ==>
Расположение структурных переменных в памяти | Массив структур


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

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