АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

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

Читайте также:
  1. MCU Poker Charts доступен всем
  2. Альтернативные интерфейсы доступа к многомерным данным
  3. Аудит доступа к объектам
  4. В каких случаях и кто имеет право ограничивать доступ к информации?
  5. Веб-сайт Летней школы: www.kantiana.ru/summerschool (доступен с 15 июня 2014 г.).
  6. Визначення рівня доступу до баз даних Lotus Notes.
  7. Вопрос 33 Как фильтрации портов и списки доступа помочь обеспечить безопасность сети?
  8. Вопрос: Как может человек в случае какого-либо заболевания включить механизм саморегуляции на уровне подсознания? Доступно ли ему это?
  9. Выбор оперативного доступа
  10. Выделение памяти для структур.
  11. Вычертить схему лесосеки и дать краткую характеристику основным ее элементам.
  12. Глава 11. Вампир не отвечает или вечно недоступен.

 

Доступ к элементам структур. Наиболее наглядно и естественно доступ к элементам структур обеспечивается с помощью уточненных имен. Конструкция

имя_структуры. имя_элемепта

 

играет роль названия (имени) объекта того типа, к которому отнесен элемент в соответствии с определением структурного типа. В нашем Примере с инициализацией структуры типа struct goods:

 

coat.name - указатель типа char * на строку "пиджак черный";

coat.price - переменная типа long со значением 400000;

coat.percent - переменная типа float со значением 7.5;

coat.vol - переменная типа int со значением 220;

coat.date - массив типа char [9], содержащий "12.01.97".

 

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

Уточненное имя - это выражение с двумя операндами и операцией "точка" между ними. Операция "точка" называется операцией доступа к элементу структуры (или объединения). У нее самый высокий ранг наряду со скобками (и операцией "стрелка" для доступа к элементам структуры через адресующий ее указатель, см. табл. 1.4).

Уточненное имя используется для выбора правого операнда операции "точка" из структуры (или объединения), задаваемой левым операндом. Левый операнд должен иметь структурный тип, а правый операнд должен быть именем компонента (элемента) этой структуры. Тип результата операции "точка", т.е. тип уточненного имени, - это тип именуемого ею компонента (элемента) структуры. Именно такие типы указаны в приведенных выше примерах, т.е. coat.vol - объект типа int и т.д.

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

Пример программы с инициализацией структуры и выводом значений ее элементов:

 

 

Результат выполнения программы:

 

 

Уточненные имена элементов структур обладают всеми правами объектов соответствующих типов. Их можно использовать в выражениях, их значения можно вводить с клавиатуры и т.д. Например, с помощью следующих операторов можно изменить торговую наценку (элемент coat.price) и вычислить розничную цену на определенный в программе товар (пиджак черный):

 

 

Обратите внимание, что в качестве фактического параметра функции scanf () используется адрес элемента percent структуры coat. Для этого операция получения адреса & применяется к уточненному имени coat.percent. При вычислении розничной цены товара приходится вводить явное приведение типов (long),так как результат умножения элемента coat.price на вещественное выражение 1.0+coat.percent/!00 имеет по умолчанию тип double.

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

 

 

Возможный результат выполнения программы:

 

 

 

Определения:

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

Функция – подпрограмма для вычисления какого-либо параметра.

Модуль – программная единица для хранения элементов, которые можно использовать в тех или иных программах. (типы, константы, переменные и подпрограммы). Если все, что было написано в программе, полностью входит в скомпилированный файл программы, то из модуля в скомп. программу попадают только те части, которые необходимы данной программе. Модуль выступает как библиотека, которую можно употреблять во многих программах. Наличие модулей позволяет программировать и отлаживать программу по частям, создавать библиотеки подпрограмм и данных, воспользоваться возможностями стандартных модулей, практически неограниченно увеличивать кодовую (содержащую коды команд) часть программы.

Модули:

 

1.Стандартные – заранее созданные разработчиками языка. Эти модули поставляются в скомпилированном виде, и их без каких-либо доработок можно использовать в программах;

2. Модули разработчика – надо написать, скомпилировать, отладить, можно вносить изменения.

Некоторые понятия:

 

Программа С почти всегда состоит из нескольких раздельно транслируемых "модулей". Каждый "модуль" обычно называется исходным файлом, но иногда - единицей трансляции. Он состоит из последовательности описаний типов, функций, переменных и констант. Описание extern позволяет из одного исходного файла ссылаться на функцию или объект, определенные в другом исходном файле.

Например:

 

extern "c" double sqrt (double);

extern ostream cout;

 

Самый распространенный способ обеспечить согласованность описаний внешних во всех исходных файлах - поместить такие описания в специальные файлы, называемые заголовочными. Заголовочные файлы можно включать во все исходные файлы, в которых требуются описания внешних. Например, описание функции sqrt хранится в заголовочном файле стандартных математических функций с именем math.h, поэтому, если нужно извлечь квадратный корень из 4, можно написать:

 

#include <math.h>

int main()

{

float x;

x=sqrt(4);

return 0;

}

 

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

 

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

 

В команде включения заключенное в угловые скобки имя файла (в нашем примере -) ссылается на файл, находящийся в стандартном каталоге включаемых файлов. Часто это - каталог /usr/include/CC. Файлы, находящиеся в других каталогах, обозначаются своими путевыми именами, взятыми в кавычки. Поэтому в следующих командах:

 

#include "math1.h"

#include "/usr/bs/math2.h"

 

включаются файл math1.h из текущего каталога пользователя и файл math2.h из каталога /usr/bs.

 

Приведем небольшой законченный пример, в котором строка определяется в одном файле, а печатается в другом. В файле header.h определяются нужные типы:

 

// header.h -здесь объявляем переменную и функцию

extern char * prog_name;

extern void f();

 

// main.c -файл основной программы

#include "header.h"

char *prog_name = "примитивный, но законченный пример";

int main()

{

f();

}

 

// f.c -здесь находится функция f(), которая печатает строку //из осн. программы

#include <iostream.h>

#include "header.h"

void f()

{

cout << prog_name << '\n';

}

 

Рассмотрим другой пример:

 

// Основная программа

#include "include_file.cpp" //Подключаем свой модуль

#include <iostream.h>

 

int main()

{

int a,b,c,d,e;

cout << "Введите A: ";

cin >> a;

cout << "Введите B: ";

cin >> b;

c=fPlus(a,b);

d=fMinus(a,b);

e=fMultiply(a,b);

cout << "Сумма= " << c << endl;

cout << "Разность= " << d << endl;

cout << "Произведение= " << e << endl;

 

return 0;

}

 

// Файл include_file.cpp - наш модуль

int fPlus(int,int); //

int fMinus(int,int); // Прототипы функций

int fMultiply(int,int); //

 

int fPlus(int a,int b)

{

return a+b;

}

int fMinus(int a,int b)

{

return a-b;

}

int fMultiply(int a,int b)

{

return a*b;

}

 

3.


1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.009 сек.)