12. Массивы и указатели
12. Массивы и указатели
МАССИВЫ. МНОГОМЕРНЫЕ МАССИВЫ. ИНИЦИАЛИЗАЦИЯ МАССИВОВ. УКАЗАТЕЛИ И ОПЕРАЦИИ НАД УКАЗАТЕЛЯМИ. СВЯЗЬ МЕЖДУ МАССИВОМ И УКАЗАТЕЛЕМ. ОПЕРАЦИИ & * (унарные)
Между массивами и указателями существует очень тесная связь, поэтому обычно их рассматривают вместе. Но, прежде чем исследовать эту связь, давайте проверим наши знания о массивах и пополним их, а уж после этого перейдем к изучению связи между массивами и указателями.
Похожие главы из других книг
7.2.4 Указатели Если производный класс derived имеет открытый базовый класс base, то указатель на derived можно присваивать перменной типа указатель на base не используя явное преобразовние типа. Обратное преобразование, указателя на base в указтель на derived, должно быть явным.
8.4.2 Массивы, Указатели и Индексирование8.4.2 Массивы, Указатели и Индексирование Всякий раз, когда в выражении появляется идентификатор типа массива, он преобразуется в указатель на первый элемент массива. Из-за преобразований массивы не являются lvalue. По определению операция индексирования || интерпретируется
R.4.8 Указатели на членыR.4.8 Указатели на члены Всюду, где указатели на члены (§R.8.2.3) инициализируются, присваиваются, сравниваются или используются иным образом, могут происходить следующие преобразования:Константное выражение (§R.5.19), которое сводится к нулю, преобразуется в указатель на член.
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».Например, во фрагменте >
Шаг 2 — Умные указатели.Шаг 2 — Умные указатели. Сначала договоримся о терминах. Перегрузка функций (overloading) — многократное определение функции с разным набором аргументов (сигнатурой). В сигнатуру включается модификатор const, но не включается возвращаемое значение. Перегрузка операторов (overloading) —
УКАЗАТЕЛИ МАССИВОВ Как было сказано в гл. 9, указатели позволяют нам работать с символическими адресами. Поскольку в реализуемых аппаратно командах вычислительной машины интенсивно используются адреса, указатели предоставляют возможность применять адреса
ФУНКЦИИ, МАССИВЫ И УКАЗАТЕЛИФУНКЦИИ, МАССИВЫ И УКАЗАТЕЛИ Массивы можно использовать в программе двояко. Во-первых, их можно описать в теле функции. Во-вторых, они могут быть аргументами функции. Вес, что было сказано в этой главе о массивах, относится к первому их применению; теперь рассмотрим
УКАЗАТЕЛИ И МНОГОМЕРНЫЕ МАССИВЫУКАЗАТЕЛИ И МНОГОМЕРНЫЕ МАССИВЫ Как создать указатели для многомерных массивов? Чтобы найти ответ на этот вопрос, рассмотрим несколько примеров. Предположим, что у нас есть описания int zippo|4||2|; /* массив типа int из 4 строк и 2 столбцов */int *pri; /*
Указатели и строки Возможно, вы заметили периодическое упоминание указателей в нашем рассказе о строках. Большинство операции языка Си, имеющих дело со строками, работает с указателями. Например, рассморим приведенную ниже бесполезную, но поучительную программу /*
УКАЗАТЕЛИ НА СТРУКТУРЫУКАЗАТЕЛИ НА СТРУКТУРЫ Любители указателей будут рады узнать, что указатели можно использовать и для структур. Это хорошо по крайней мере по трем причинам. Во-первых, точно так же как указатели на массивы, они легче в использовании (скажем, в задаче сортировки), чем
3.3. Указатели Указатели и динамическое выделение памяти были вкратце представлены в разделе 2.2. Указатель – это объект, содержащий адрес другого объекта и позволяющий косвенно манипулировать этим объектом. Обычно указатели используются для работы с динамически
7.9. Указатели на функции7.9. Указатели на функции Предположим, что нам нужно написать функцию сортировки, вызов которой выглядит так:sort( start, end, compare );где start и end являются указателями на элементы массива строк. Функция sort() сортирует элементы между start и end, а аргумент compare задает операцию сравнения
Указатели Указатель в С++ — это переменная, содержащая не сам объект, а адрес памяти, где располагается объект. Java и C# имеют аналогичную концепцию «ссылки» при другом синтаксисе. Мы начнем с рассмотрения придуманного нами примера, иллюстрирующего применение указателей:01
УКАЗАТЕЛИ НА СТРУКТУРЫ
УКАЗАТЕЛИ НА СТРУКТУРЫ
Любители указателей будут рады узнать, что указатели можно использовать и для структур. Это хорошо по крайней мере по трем причинам. Во-первых, точно так же как указатели на массивы, они легче в использовании (скажем, в задаче сортировки), чем сами массивы, а указателями на структуры легче пользоваться, чем самими структурами. Во-вторых, структура не может использоваться в качестве аргумента функции, а указатель на структуру может. В-третьих, многие удобные представления данных являются структурами, содержащими указатели к другим структурам.
Следующий короткий пример (рис. 14.5) показывает, как определять указатель на структуру и как использовать его для получения элементов структуры.
/* указатель на структуру */
#define LEN 20 struct names favfood is %s : him -> names.last is %s «,
him-> favfood, him -> handle.last);>
РИС. 14.5. Программа с использованием указателя на структуру.
Вот, пожалуйста, ее выход:
указатель #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 Указатели на Члены5.4.5 Указатели на Члены Можно брать адрес члена класса. Получение адреса функции члена часто бывает полезно, поскольку те цели и причины, кторые приводились в #4.6.9 относительно указателей на фунции, в равной степени применимы и к функциям членам. Однако, на настоящее время в
5.4.5 Указатели на Члены5.4.5 Указатели на Члены Можно брать адрес члена класса. Получение адреса функции члена часто бывает полезно, поскольку те цели и причины, кторые приводились в #4.6.9 относительно указателей на фунции, в равной степени применимы и к функциям членам. Однако, на настоящее время в
7.2.4 Указатели Если производный класс derived имеет открытый базовый класс base, то указатель на derived можно присваивать перменной типа указатель на base не используя явное преобразовние типа. Обратное преобразование, указателя на base в указтель на derived, должно быть явным.
6.4 Указатели и Целые6.4 Указатели и Целые Выражение целого типа можно прибавить к указателю или вычесть из него. В таком случае первый преобразуется, как указывается при обсуждении операции сложения.Можно производить вычитание над двумя указателями на объекты одного типа; в этом случае
R.4.8 Указатели на членыR.4.8 Указатели на члены Всюду, где указатели на члены (§R.8.2.3) инициализируются, присваиваются, сравниваются или используются иным образом, могут происходить следующие преобразования:Константное выражение (§R.5.19), которое сводится к нулю, преобразуется в указатель на член.
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».Например, во фрагменте >
Шаг 2 — Умные указатели.Шаг 2 — Умные указатели. Сначала договоримся о терминах. Перегрузка функций (overloading) — многократное определение функции с разным набором аргументов (сигнатурой). В сигнатуру включается модификатор const, но не включается возвращаемое значение. Перегрузка операторов (overloading) —
3.3. Указатели Указатели и динамическое выделение памяти были вкратце представлены в разделе 2.2. Указатель – это объект, содержащий адрес другого объекта и позволяющий косвенно манипулировать этим объектом. Обычно указатели используются для работы с динамически
7.9. Указатели на функции7.9. Указатели на функции Предположим, что нам нужно написать функцию сортировки, вызов которой выглядит так:sort( start, end, compare );где start и end являются указателями на элементы массива строк. Функция sort() сортирует элементы между start и end, а аргумент compare задает операцию сравнения
Указатели Указатель в С++ — это переменная, содержащая не сам объект, а адрес памяти, где располагается объект. Java и C# имеют аналогичную концепцию «ссылки» при другом синтаксисе. Мы начнем с рассмотрения придуманного нами примера, иллюстрирующего применение указателей:01