Структура исполняемого модуля.



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

Модуль имеет следующую структуру:

Unit <имя>;

interface

<интерфейсная часть> implementation

<исполняемая часть> initialization <нициирующая часть> finalization <завершающая часть>

end.

Здесь unit - зарезервированное слово (единица); начинает заголовок модуля; <имя> - имя модуля (правильный идентификатор); interface - зарезервированное слово (интерфейс); начинает интерфейсную часть модуля; implementation - зарезервированное слово (выполнение); начинает исполняемую часть; initialization -зарезервированное слово (инициация); начинает инициирующую часть модуля; finalization - зарезервированное слово (завершение);начинает завершающую часть модуля; end - зарезервированное слово - признак конца модуля.Таким образом, модуль состоит из заголовка и четырех составных частей, любая из которых может быть пустой.

 

14. Переменные: объявление, определение, инициализация

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

char (символьный);

short (короткий целый);

int (целый);

long (длинный целый);

float (вещественный);

double (вещественный с удвоенной точностью);

void (отсутствие значения) (будет рассматриваться при изучении функций в С++);

В таблице 2.1 приведены основные типы данных с диапазоном значений и назначением типов.

Переменные Тип данных Размер, бит (байт) Диапазон значений Примечание-назначение типа
Символьные unsigned char 8 бит(1 байт) 0…255 Небольшие целые числа и коды символов.
char 8 бит(1 байт) -128…127 Очень малые целые числа и ASCII-коды.
Перечисления enum 16 бит(2 байта) -32768…32767 Упорядоченные наборы целых значений.
Целочисленные unsigned int 16 бит(2 байта) 0…65535 Большие целые и счётчики циклов.
short int 16 бит(2 байта) -32768…32767 Небольшие целые. Управление циклами.
int 16 бит(2 байта) -32768…32767 Небольшие целые. Управление циклами.
unsigned long 32 бит(4 байта) 0…4294967295 Астрономические расстояния.
long 32 бит(4 байта) -2147483648……2147483647 Большие числа, популяции.
Вещественные float 32 бит(4 байта) 3.4Е-38……3.4Е+38 Научные расчёты (7 значащих цифр)
double 64 бит(8 байт) 1.7Е-308……1.7Е+308 Научные расчёты (15 значащих цифр)
long double 80 бит(10 байт) 3.4Е-4932……1.1Е+4932 Финансовые расчёты (19 значащих цифр)

В С++ допустимы две формы инициализации переменной – явная, с использованием оператора присваивания:

int ival = 1024;

string project = "Fantasia 2000";

и неявная, с заданием начального значения в скобках:

int ival(1024);

string project("Fantasia 2000");

Оба варианта эквивалентны и задают начальные значения для целой переменной ival как 1024 и для строки project как "Fantasia 2000".
Явную инициализацию можно применять и при определении переменных списком:

double salary = 9999.99, wage = salary + 0.01;

int month = 08;

day = 07, year = 1955;

Переменная становится видимой (и допустимой в программе) сразу после ее определения, поэтому мы могли проинициализировать переменную wage суммой только что определенной переменной salary с некоторой константой. Таким образом, определение:

// корректно, но бессмысленно

int bizarre = bizarre;

является синтаксически допустимым, хотя и бессмысленным.

15. Переменные: значение, указатель, ссылка.

Указатель – переменная, значением которой является адрес ячейки памяти. То есть указатель ссылается на блок данных из области памяти, причём на самое его начало. Указатель может ссылаться на переменную или функцию. Для этого нужно знать адрес переменной или функции. Так вот, чтобы узнать адрес конкретной переменной в С++ существует унарная операция взятия адреса &. Такая операция извлекает адрес объявленных переменных, для того, чтобы его присвоить указателю.

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

  //объявление указателя /*тип данных*/ * /*имя указателя*/;

Принцип объявления указателей такой же, как и принцип объявления переменных. Отличие заключается только в том, что перед именем ставится символ звёздочки *. Визуально указатели отличаются от переменных только одним символом. При объявлении указателей компилятор выделяет несколько байт памяти, в зависимости от типа данных отводимых для хранения некоторой информации в памяти. Чтобы получить значение, записанное в некоторой области, на которое ссылается указатель нужно воспользоваться операцией разыменования указателя *. Необходимо поставить звёздочку перед именем и получим доступ к значению указателя. Разработаем программу, которая будет использовать указатели.

  // pointer1.cpp: определяет точку входа для консольного приложения.   #include "stdafx.h" #include <iostream> using namespace std;   int main(int argc, char* argv[]) { int var = 123; // инициализация переменной var числом 123 int *ptrvar = &var; // указатель на переменную var (присвоили адрес переменной указателю) cout << "&var = " << &var << endl;// адрес переменной var содержащийся в памяти, извлечённый операцией взятия адреса cout << "ptrvar = " << ptrvar << endl;// адрес переменной var, является значением указателя ptrvar cout << "var = " << var << endl; // значение в переменной var cout << "*ptrvar = " << *ptrvar << endl; // вывод значения содержащегося в переменной var через указатель, операцией разименования указателя system("pause"); return 0; }

В строке 10 объявлен и инициализирован адресом переменной var указатель ptrvar.

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

  // структура объявления ссылок /*тип*/ &/*имя ссылки*/ = /*имя переменной*/;

При объявлении ссылки перед её именем ставится символ амперсанда &, сама же ссылка должна быть проинициализирована именем переменной, на которую она ссылается. Тип данных, на который указывает ссылка, может быть любым, но должен совпадать с объектом, на который ссылается, то есть с типом данных ссылочной переменной. Для удобства, будем называть переменную, на которую ссылается ссылка «ссылочной переменной». Любое изменение значения содержащегося в ссылке повлечёт за собой изменение этого значения в переменной, на которую ссылается ссылка. Разработаем программу, в которой объявим ссылку на объект типа int.

  // №1.cpp: определяет точку входа для консольного приложения.   #include "stdafx.h" #include <iostream> using namespace std;   int main(int argc, char* argv[]) { int value = 15; int &reference = value; // объявление и инициализация ссылки значением переменной value cout << "value = " << value << endl; cout << "reference = " << reference << endl; reference+=15; // изменяем значение переменной value посредством изменения значения в ссылке cout << "value = " << value << endl; // смотрим, что получилось, как будет видно дальше значение поменялось как в ссылке, cout << "reference = " << reference << endl; // так и в ссылочной переменной system("pause"); return 0; }

В строке 10 объявлена ссылка reference типа int на переменную value. В строке 13 суммируется значение переменной value с числом 15, через ссылку reference. Результат работы программы смотреть на рисунке 1.

Рисунок 1 — Ссылки в С++

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

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

 


Дата добавления: 2015-12-21; просмотров: 65; Мы поможем в написании вашей работы!

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






Мы поможем в написании ваших работ!