УКАЗАТЕЛИ НА СТРУКТУРЫ

УКАЗАТЕЛИ НА СТРУКТУРЫ

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

     Следующий короткий пример (рис. 14.5) показывает, как определять указатель на структуру и как использовать его для получения элементов структуры.

/* указатель на структуру */

#define LEN 20 struct names {

char first [LEN];

char last [LEN]; };

struct guy {

struct names handle;

char favfood [LEN];

char job [LEN];

float income; };

main( ) {

static struct guy fellow [2] = {

    { "Франко", "Уотэл" }

    "баклажан",

    " вязальщик половиков ",

    15435.00},

    {{"Родней", "Свилбели" },

    "лососевый мусс", "декоратор интерьера",

    35000.00 } };

struct guy *him;  /* ЭТО - - указатель па структуру */

printf("адрес #1:  %u  #2 : %u ", &fellow[0],

                                    &fellow[1]);

him = &fellow[0]; /* сообщает указателю, на что ссылаться */

printf("указатель #1: %u   #2: %u ", him, him + 1);

printf("him  -> доход $ %.2f: (*him).доход $ %.2f ",

                            him -> доход, (*him).доход);

him++;    /* указывает на следующую структуру */

printf("him -> favfood is %s : him -> names.last is %s ",

                        him-> favfood, him -> handle.last);}

РИС. 14.5. Программа с использованием указателя на структуру.

Вот, пожалуйста, ее выход:

адрес #1:  12    #2: 96

указатель #1: 12     #2: 96

him -> доход $15435.00: (*him).доход $15435.00

him -> favfood  лососевый мусс: him -> names.last

                                    - Свилбели

Сначала посмотрим, как мы создали указатель на структуру guy. Затем научимся определять отдельные элементы структуры при помощи указателей.  

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

2.3.7 Указатели и Вектора

Из книги Сущность технологии СОМ. Библиотека программиста автора Бокс Дональд

2.3.7 Указатели и Вектора Указатели и вектора в С++ связаны очень тесно. Имя вектора можно использовать как указатель на его первый элемент, поэтому пример с алфавитом можно было написать так:char alpha[] = «abcdefghijklmnopqrstuvwxyz»; char* p = alpha; char ch;while (ch = *p++) cout «„ chr(ch) „« " = " «« ch «« « = 0“ ««


5.4.5 Указатели на Члены

Из книги Справочное руководство по C++ автора Страустрап Бьярн

5.4.5 Указатели на Члены Можно брать адрес члена класса. Получение адреса функции члена часто бывает полезно, поскольку те цели и причины, кторые приводились в #4.6.9 относительно указателей на фунции, в равной степени применимы и к функциям членам. Однако, на настоящее время в


5.4.5 Указатели на Члены

Из книги Идиомы и стили С++ автора Makhmutov Albert

5.4.5 Указатели на Члены Можно брать адрес члена класса. Получение адреса функции члена часто бывает полезно, поскольку те цели и причины, кторые приводились в #4.6.9 относительно указателей на фунции, в равной степени применимы и к функциям членам. Однако, на настоящее время в


7.2.4 Указатели

Из книги C++ для начинающих автора Липпман Стенли

7.2.4 Указатели Если производный класс derived имеет открытый базовый класс base, то указатель на derived можно присваивать перменной типа указатель на base не используя явное преобразовние типа. Обратное преобразование, указателя на base в указтель на derived, должно быть явным.


6.4 Указатели и Целые

Из книги QT 4: программирование GUI на С++ автора Бланшет Жасмин

6.4 Указатели и Целые Выражение целого типа можно прибавить к указателю или вычесть из него. В таком случае первый преобразуется, как указывается при обсуждении операции сложения.Можно производить вычитание над двумя указателями на объекты одного типа; в этом случае


R.4.8 Указатели на члены

Из книги автора

R.4.8 Указатели на члены Всюду, где указатели на члены (§R.8.2.3) инициализируются, присваиваются, сравниваются или используются иным образом, могут происходить следующие преобразования:Константное выражение (§R.5.19), которое сводится к нулю, преобразуется в указатель на член.


R.8.2.1 Указатели

Из книги автора

R.8.2.1 Указатели В описании T D, в котором D имеет вид* список-спецификаций-cv opt D1тип описываемого идентификатора есть"… список-спецификаций-cv указатель на T". Конструкция список-спецификаций-cv относится к указателю, а не к указуемому объекту.Например, в описанияхconst ci = 10, *pc =


R.8.2.3 Указатели на члены

Из книги автора

R.8.2.3 Указатели на члены В описании T D, в котором D имеет видполное-имя-класса :: * список-спецификаций-cv opt D1тип описываемого идентификатора есть "… список-спецификаций-cv указатель на член класса полное-имя-класса типа T".Например, во фрагментеclass X {public: void f(int); int a;};int X::* pmi =


Шаг 2 - Умные указатели.

Из книги автора

Шаг 2 - Умные указатели. Сначала договоримся о терминах. Перегрузка функций (overloading) - многократное определение функции с разным набором аргументов (сигнатурой). В сигнатуру включается модификатор const, но не включается возвращаемое значение. Перегрузка операторов (overloading) -


3.3. Указатели

Из книги автора

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


7.9. Указатели на функции

Из книги автора

7.9. Указатели на функции Предположим, что нам нужно написать функцию сортировки, вызов которой выглядит так:sort( start, end, compare );где start и end являются указателями на элементы массива строк. Функция sort() сортирует элементы между start и end, а аргумент compare задает операцию сравнения


Указатели

Из книги автора

Указатели Указатель в С++ — это переменная, содержащая не сам объект, а адрес памяти, где располагается объект. Java и C# имеют аналогичную концепцию «ссылки» при другом синтаксисе. Мы начнем с рассмотрения придуманного нами примера, иллюстрирующего применение указателей:01


Указатели

Из книги автора

Указатели Указатель - это ячейка памяти, хранящая адрес. В PascalABC.NET указатели делятся на типизированные (содержат адрес ячейки памяти данного типа) и бестиповые (содержат адрес оперативной памяти, не связанный с данными какого-либо определенного типа).Тип указателя на