Вход

Типы данных определяемые пользователем. Структурируемые типы. Ссылочные типы и указатели. Совместимость и преобразование типов. Типизированные константы.

Рекомендуемая категория для самостоятельной подготовки:
Реферат*
Код 313783
Дата создания 08 июля 2013
Страниц 20
Мы сможем обработать ваш заказ (!) 23 декабря в 12:00 [мск]
Файлы будут доступны для скачивания только после обработки заказа.
910руб.
КУПИТЬ

Содержание

Оглавление

Введение
1.Типы данных определяемые пользователем
1.1.Перечислимые типы
1.2.Структуры
1.3.Битовые поля
1.4.Объединения
2.Структурируемые тип
3.Ссылочные типы и указатели.
3.1.Указатели
3.2.Ссылочные типы.
4.Типизированные константы
5.Совместимость и преобразование типов.
Заключение
Список используемой литературы

Введение

Типы данных определяемые пользователем. Структурируемые типы. Ссылочные типы и указатели. Совместимость и преобразование типов. Типизированные константы.

Фрагмент работы для ознакомления

long phoneNum; // Телефон как длинное целое.} aPerson; // Объявляет переменную типа // struct Person.Как и в случае перечислений, в определении структуры можно сразу объявить переменные структурного типа, указав их имена после закрывающей фигурной скобки. Аналогично именем типа является struct этикетка, и его можно сразу переопределить с помощью ключевого слова typedef. Для доступа к отдельным элементам структуры имеются две операции: точка и стрелка, за которыми следует имя элемента. Какую из них следует применять, зависит от того, имеете ли вы дело с самой переменной-структурой или у вас есть только указатель на нее, как это имеет место в случае динамических объектов. С именем переменной применяется точка, с указателем — стрелка. Имея в виду предыдущее определение, можно было бы написать:struct Person *pPerson - SaPerson; // Указатель на // структуру.aPerson.age = atol(ageStr); // Записать в структуру// возраст aPerson.sex - male; // и т.д. pPerson->phoneNum = atol(phoneStr); ///* Напечатать имя и фамилию (предполагается, что они уже инициализированы).*/ printf("%s %s\n", pPerson->firstName, pPerson->lastName);Битовые поляВ качестве элементов структуры можно определять битовые поля. Для них задается ширина поля в битах, и компилятор отводит под элемент ровно столько бит, сколько указано. Несколько битовых полей может быть таким образом упаковано в одном слове. Синтаксис битового поля: тип [имя поля]: ширина поля; Тип поля может быть int или unsigned int. Доступ к битовым полям осуществляется так же, как и к регулярным элементам структуры. Если имя_поля отсутствует, место под поле отводится, но оно остается недоступным. Это будут просто “заполняющие” биты.ОбъединенияОбъединения, определяемые с помощью ключевого слова union, похожи по своему виду на структуры: union этикетка {список_элементов] [переменные];Отличие состоит в том, что все элементы объединения занимают одно и то же место в памяти, они перекрываются. Компилятор отводит под объединение память, достаточную для размещения наибольшего элемента.Структурируемые типыМассив представляет собой совокупность элементов одного типа, а структура является совокупностью элементов произвольных (практически) типов. Например: struct address { char* name; // имя "Jim Dandy" long number; // номер дома 61 char* street; // улица "South Street" char* town; // город "New Providence" char* state[2]; // штат 'N' 'J' int zip; // индекс 7974 };Здесь определяется новый тип, называемый address, который задает почтовый адрес. Определение не является достаточно общим, чтобы учесть все случаи адресов, но оно вполне пригодно для примера. Обратите внимание на точку с запятой в конце определения: это один из немногих в С++ случаев, когда после фигурной скобки требуется точка с запятой, поэтому про нее часто забывают. Переменные типа address можно описывать точно так же, как и любые другие переменные, а с помощью операции (точка) можно обращаться к отдельным членам структуры. Например: address jd; jd.name = "Jim Dandy"; jd.number = 61;Инициализировать переменные типа struct можно так же, как массивы.Например: address jd = { "Jim Dandy", 61, "South Street", "New Providence", {'N','J'}, 7974 };Но лучше для этих целей использовать конструктор ($$5.2.4). Отметим, что jd.state нельзя инициализировать строкой "NJ". Ведь строки оканчиваются нулевым символом '\0', значит в строке "NJ" три символа, а это на один больше, чем помещается в jd.state. К структурным объектам часто обращаются c помощью указателей, используя операцию ->. Например: void print_addr(address* p) { cout << p->name << '\n' << p->number << ' ' << p->street << '\n' << p->town << '\n' << p->state[0] << p->state[1] << ' ' << p->zip << '\n'; } Объекты структурного типа могут быть присвоены, переданы как фактические параметры функций и возвращены функциями в качестве результата. Например: address current; address set_current(address next) { address prev = current; current = next; return prev; }Другие допустимые операции, например, такие, как сравнение (== и !=), неопределенны. Однако пользователь может сам определить эти операции. Размер объекта структурного типа не обязательно равен сумме размеров всех его членов. Это происходит по той причине, что на многих машинах требуется размещать объекты определенных типов, только выравнивая их по некоторой зависящей от системы адресации границе (или просто потому, что работа при таком выравнивании будет более эффективной ). Типичный пример - это выравнивание целого по словной границе. В результате выравнивания могут появиться "дырки" в структуре. Следует также упомянуть, что тип можно использовать сразу после его появления в описании, еще до того, как будет завершено все описание. Например: struct link{ link* previous; link* successor; };Однако новые объекты типа структуры нельзя описать до тех пор, пока не появится ее полное описание. Поэтому описание: struct no_good { no_good member; }; является ошибочным (транслятор не в состоянии установить размер no_good). Чтобы позволить двум (или более) структурным типам ссылаться друг на друга, можно просто описать имя одного из них как имя некоторого структурного типа. Например: struct list; // будет определено позднее struct link { link* pre; link* suc; list* member_of; }; struct list { link* head; }; Если бы не было первого описания list, описание члена link привело бы к синтаксической ошибке. Можно также использовать имя структурного типа еще до того, как тип будет определен, если только это использование не предполагает знания размера структуры. Например: class S; // 'S' - имя некоторого типа extern S a S f(); void g(S);Но приведенные описания можно использовать лишь после того, как тип S будет определен: void h() { S a; // ошибка: S - неописано f(); // ошибка: S - неописано g(a); // ошибка: S – неописано }Два структурных типа считаются различными даже тогда, когда они имеютодни и те же члены. Например, ниже определены различные типы: struct s1 { int a; }; struct s2 { int a; }; В результате имеем: s1 x; s2 y = x; // ошибка: несоответствие типовКроме того, структурные типы отличаются от основных типов, поэтому получим: s1 x; int i = x; // ошибка: несоответствие типов Есть, однако, возможность, не определяя новый тип, задать новое имя для типа. В описании, начинающемся служебным словом typedef, описывается не переменная указанного типа, а вводится новое имя для типа. Приведем пример: typedef char* Pchar; Pchar p1, p2; char* p3 = p1; Это просто удобное средство сокращения записи.Ссылочные типы и указателиУказателиУказатель — это переменная, которая содержит адрес другого объекта. Этим объектом может быть некоторая переменная, динамический объект или функция. Говорят, что указатель ссылается на соответствующий объект. Чтобы превратить указатель в объект, применяется оператор *. Хотя адрес, по существу — 32-битное целое число, определяющее положение объекта в виртуальной памяти программы, указатель является не просто целым числом, а специальным типом данных. Он “помнит”, на какого рода данные ссылается. Объявление указателя выглядит так:тип_указываемого_объекта *имя_указателя [= значение];Вот примеры объявлений:int *pIntVar; // Указатель на целое. double *pDouble = SdoubleVar; // Инициализация указателя// на double. char *arrStr[16]; // Массив указателей на char. char (*arrStr) [16][16]; // Указатель на матрицу char.Ссылочные типыНа первый взгляд ссылки ничем не напоминают указатели. Гораздо больше они похожи на псевдонимы переменных, которые можно использовать наравне с «подлинными» именами. Ссылка объявляется с помощью оператора &, например:int &b = a Здесь а - исходная целочисленная переменная, b- ссылка на нее. В отличие от указателя, ссылка не может существовать сама по себе. Только что объявленная ссылка связывается с переменной. Связь ссылки и переменной можно использовать при передаче аргументов функций. Если передается ссылка, то ее изменение должно отражаться на самой переменной. Хоть передача указателей и передача ссылок приводят к одному и тому же результату, ссылки считаются более удобными и чаще используются в С++. Типизированные константыТипизированные константы являются разновидностью переменных. Это переменные, значение которых (заданное при инициализации) нельзя изменить. Создание типизированной константы ничем не отличается от инициализации переменной, за исключением того, что перед оператором объявления ставится ключевое слово const:const тип имя_константы = значение [, ...];Например:const double Pi = 3.14159265;Совместимость и преобразование типовИногда бывает необходимо явно преобразовать значение одного типа в значение другого. Результатом явного преобразования будет значение указанного типа, полученное из значения другого типа.Например: float r = float(1); Здесь перед присваиванием целое значение 1 преобразуется в значение с плавающей точкой 1.0f.

Список литературы

Список используемой литературы

1.Бьерн Страуступ «Язык программирования С » - СПб Питер, 2007 г.
2.Герберт Шилдт «Искусство программирования на С » - СПб Питер, 2005 г.
3.Крупник А.Б. «Изучаем С » - Москва, 2003 г.

Очень похожие работы
Найти ещё больше
Пожалуйста, внимательно изучайте содержание и фрагменты работы. Деньги за приобретённые готовые работы по причине несоответствия данной работы вашим требованиям или её уникальности не возвращаются.
* Категория работы носит оценочный характер в соответствии с качественными и количественными параметрами предоставляемого материала. Данный материал ни целиком, ни любая из его частей не является готовым научным трудом, выпускной квалификационной работой, научным докладом или иной работой, предусмотренной государственной системой научной аттестации или необходимой для прохождения промежуточной или итоговой аттестации. Данный материал представляет собой субъективный результат обработки, структурирования и форматирования собранной его автором информации и предназначен, прежде всего, для использования в качестве источника для самостоятельной подготовки работы указанной тематики.
bmt: 0.00428
© Рефератбанк, 2002 - 2024