русс | укр

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

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

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

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


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

Доступ к элементам структуры.


Дата добавления: 2015-07-09; просмотров: 904; Нарушение авторских прав


В языке Си с каждым полем приходиться работать, как с самостоятельной переменной. Для доступа к полям структуры есть два специальных оператора:

. (точка), используется, когда работают с самой структурой (прямое обращение по имени );

->(минус и знак "больше"), когда работают с указателем на структуру (косвенное обращение).

 

Пример:

#include <stdio.h>

void main()

{struct date

{ int day;

char month[10];

int year;

};

struct date e_day, s_day,*p1,*p2;

cout<< "Введите дату"<<endl;

cout<< "День:"; cin>>s_day.day;

cout<<"Месяц:"; cin>>s_day.month;

cout<<"Год:"; cin>>s_day.year;

cout<<"________________________________"<<endl;

p1=&s_day; // установка указателя

cout<<"Введенная дата"<<endl;

cout<< p1->day<<" "<<p1->month<<" "<<p1->year<<endl;

p2=&e_day; // установка указателя

p2->day = 22;

// копирование из одного объекта в другой

memcpy (p2->month, p1-> month,15);

p2-> year = p1-> year;

}

Обратите внимание, что перед точкой стоит имя объекта, для которого выделена память.

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

В структуре date под строку память выделяется в самой структуре, это приводит к созданию массива из 10 char-элементов для каждой переменной типа struct date, что весма неэкономично, так как строки вводимые с клавиатуры будут разной длины, а память выделяется всегда одна и та же. В следующем примере память под строку выделяется динамически. Структура имеет указатель на строку, память же под строку выделяется в процессе работы динамически после того, как становится известна длина строки.



Подробно схема работы с динамической строкой рассмотрена в файле:

М:\ИПОВС\ООП\ЭКТ-2\Справочная информация\Дин память_применение

 

Пример : создать структуру и выделить память под структурные переменные для хранения информации о товаре на складе. Каждая позиция склада содержит разнотипную информацию о товаре, например: название, цену, количество.

Создаем новый структурный тип struct tovar и выделяем память под переменную с именем food :

struct tovar

{

char* name ; / / наименование, указатель на строку

double price ;/ / цена

int vol ; / / количество

} food;

 

В следующем примере показано, как работать с полем структуры, которое является текстовой строкой, определенной через указатель.

#include <iostream>

using namespace std;

void main()

// определение структурного типа

{

struct tovar

{ char* name ;

double price ;

int vol ;

};

char buff[60]; //статический char-массив для ввода с клавиатуры

struct tovar meat;//определить структурную переменную meat

//_____________________________________________

// Занести информацию в поля переменной meat с клавиатуры

cout<<"Название:";

cin>>buff; // ввод строки c клавиатуры в переменную buff

//выделить динамическую память под строку

meat.name = new char[strlen(buff)+1];

strcpy(meat.name, buff); // копировать buff в динамическую память

cout<< "Цена: "); cin>>meat.price; // ввод поля «цена»

cout<<"Количество: "; cin>>meat.vol; // ввод поля «кол-во»

cout<<"_____________________________"<<endl;

cout<<"Название:"<<meat.name<<endl;

cout<<"Цена: "<<meat.price<<endl;

cout<<"Количество: "<<meat.vol<<endl;

}

Перечислим этапы работы с полями-строками, чтобы создать и заполнить с клавиатуры строку для названия товара, необходимо три этапа.

Во-первых информация вводится в промежуточную (статическую) строку buff, без этой дополнительной строки невозможно определить какой объем памяти запрашивать из кучи. Затем, с помощью оператора new выделяется необходимая динамическая память под уже известную текстовую строку. Затем информация из buff копируется в динамическую память с помощью функции strcpy().После того, как информация введена во все поля объекта meat, она выводится на экран терминала.

 

Контрольные вопросы

 

1. Приведите пример статического выделения памяти под переменную.

2. Приведите пример динамического выделения памяти под переменную.

3. В чем основное различие статического и динамического массива.

4. Какой оператор выделяет динамическую память, приведите пример.

5. Какой оператор освобождает динамическую память, приведите пример.

6. Перечислите последовательность действий при использовании структур.

7. Как выделить память под структурный объект?

8. Опишите два способа для обращения к полям структуры?

 

 



<== предыдущая лекция | следующая лекция ==>
Структурный тип данных. | Общие требования


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


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

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

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


 


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

 
 

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

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