Определяющее-тип-имя идентификатор

Typedef.

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

typedef int miles, *klicksp; typedef struct { double re, im; } complex;

конструкции

miles distance; extern klicksp metricp; complex z, *zp;

становятся законными описаниями; при этом типом distance является int,типом metricp - "указатель на int", типом z - специфицированнаяструктура и типом zp - указатель на такую структуру.

Спецификатор typedef не вводит каких-либо совершенно новых типов, атолько определяет синонимы для типов, которые можно было быспецифицировать и другим способом. Так в приведенном выше примерепеременная distance считается имеющей точно такой же тип, что и любойдругой об'ект, описанный в int.

 
Модификатор const Модификатор const предотвращает любые присваивания данному объекту, а также прочие побочные эффекты, такие как инкремент или декремент объекта. Указатель const не может быть модифицирован, хотя сам объект, на который он указывает, может. Рассмотрим следующие примеры: const float pi = 3.1415926;const maxint = 32767;char *const str = "Hello, world!"; // указатель константаchar const *str2 = "Hello, world!"; // указатель на константу В С++ const также "скрывает" объект const и предотвращает внешнюю компоновку. При необходимости нужно использовать extern const. Указатель на const не может быть присвоен указателю на неconst (в противном случае значению const могло было быть выполнено присвоение при помощи указателя на не-const.) Например, char *str3 = str2 /* запрещено */   Указатели Что такое указатели Они очень полезны. Почему? Потому что вместо передачи больших структур данных (класса, структуры, массива) в функции Вы просто передаете адрес. Размер указателя очень мал. Такое эффективное использование указателей сделает ваш код более производительным. Кроме того, они важные инструменты для операций с кучей памяти, таких как динамическое распределение и освобождение. Как использовать указатели (простое пример)   int a = 3; // сначала создать что-то на что будет ссылаться указатель int *ptr = 0; // Далее вы создаете указатель, используя * ptr = &a; // присвоить указателю адрес & Наиболее важными действиями связанные с указателями является операция обращения по адресу * и операция определения адреса &. Операция * служит для присваивания и считывания значения переменной, на которую ссылается указатель, а операция & возвращает адрес памяти своего операнда. Причём размер записи зависит от применяемой модели динамической памяти. В приложениях C++ возможно использование 6 моделей памяти. Tiny – крошечная Small – маленькая Medium – средняя Compact – компактная Large – большая Huge – огромная

 

Определение структуры

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

- объявление и определение типа структуры,

- объявление структурной переменной,

- инициализация структурной переменной,

- использование структурной переменной.

Определение типа структуры представляется в виде

struct ID

{

<тип> <имя 1-го элемента>;

<тип> <имя 2-го элемента>;

…………

<тип> <имя последнего элемента>;

};

Определение типа структуры начинается с ключевого слова struct и содержит список объявлений, заключенных в фигурные скобки. За словом struct следует имя типа, называемое тегом структуры (tag – ярлык, этикетка). Элементы списка объявлений называются членами структуры или полями. Каждый элемент списка имеет уникальное для данного структурного типа имя. Однако следует заметить, что одни и те же имена полей могут быть использованы в различных структурных типах.

Структуры и функции

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

Существует три способа передачи структур функциям:

- передача компонентов структуры по частям;

- передача целиком структуры;

- передача указателя на структуру.

Битовые поля

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

1. Если ограничено место для хранения информации, можно сохранить несколько логических (истина/ложь) переменных в одном байте.

2. Некоторые интерфейсы устройств передают информацию, закодировав биты в один байт.

3. Некоторым процедурам кодирования необходимо получить доступ к отдельным битам в байте.

Хотя все эти функции могут выполняться с помощью битовых операторов, битовые поля могут внести большую ясность в программу.

Метод использования битовых полей для доступа к битам основан на структурах. Битовое поле, на самом деле, - это просто особый тип структуры, определяющей, какую длину имеет каждый член. Стандартный вид объявления битовых полей следующий:

struct имя структуры {
тип имя1: длина;
тип имя2: длина;
...
тип имяN: длина;
}

 

Объединения C++ очень похожи на структуры, за исключением того, как C++ хранит их в памяти; кроме того, объединение может хранить значение только для одного элемента в каждый момент времени.

Объединение представляет собой структуру данных, подобную структуре C++, и состоит из частей, называемых элементами.

1-Объединение определяет шаблон, с помощью которого программы далее объявляют переменные.

2-Для обращения к определенному элементу объединения ваши программы используют оператор C++ точку.

3-Чтобы изменить значения элемента объединения внутри функции, ваша программа должна передать переменную объединения в функцию с помощью адреса.

4-Анонимное объединение представляет собой объединение, у которого нет имени (тэга).

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

Перечисления

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

 

 

Выражения