АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Указатели и функции. Указатели на объекты. Указатели и функции

Читайте также:
  1. II. Основные задачи и функции
  2. III. Предмет, метод и функции философии.
  3. XVIII. ПРОЦЕДУРЫ И ФУНКЦИИ
  4. А) ПЕРЕДАЧА НА РУССКОМ ЯЗЫКЕ ФУНКЦИИ АРТИКЛЯ
  5. А. Средняя квадратическая погрешность функции измеренных величин.
  6. Абстрактные классы и чистые виртуальные функции. Виртуальные деструкторы. Дружественные функции. Дружественные классы.
  7. Адаптивные функции
  8. Администраторы судов, их функции
  9. Алгебраическое интерполирование функции.
  10. Анализ функции логики высказываний
  11. Аналитические функции
  12. Арендная плата: состав и функции

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

Указатели на объекты

Указатели могут указывать на объекты так же, как и на простые типы данных и массивы. Мы рассмотрели много примеров объявления таких объектов, как:

Distance dist;

где определен объект dist класса Distance. Однако в некоторых случаях на момент написания программы нам неизвестно количество объектов, которое необходимо создать. Тогда мы можем использовать операцию new для создания объектов во время работы программы. Как мы видели, операция new возвращает указатель на неименованный объект.

 

Строки и указатели на строки

Указатели на строки

Строки — это просто массивы элементов типа char. Таким образом, доступ через указатели может быть применен к элементам строки так же, как и к элементам массива.

Указатели на строковые константы

Рассмотрим программу TWOSTR, в которой определены две строки: одна — с использованием операций массива, а другая — с использованием указателей:

// twostr.cpp

// описание строк через массивы и через указатели

#include <iostream>

using namespace std;

 

int main ( )

{

char str1 [ ] = "Определение через массив";

char* str2 = "Определение через указатель";

 

cout << str1 << endl; // покажем наши строки

cout << str2 << endl;

 

//str1++; // так делать нельзя

str2++; // а так можно

 

cout << str2 << endl; // значение str2 немного изменилось

 

return 0;

}

Во многих случаях эти два способа определения строк эквивалентны. Вы можете распечатать обе строки, используя их как аргументы функций. Это показано в примере. Но есть небольшое различие: str1 — это адрес, то есть указатель-константа, a str2 — указатель-переменная. Поэтому str2 может изменять свое значение, a str1 нет, что показано в программе. Рисунок 10.10 показывает расположение этих двух строк в памяти.



Мы можем увеличить str2, так как это указатель, но после этой операции он уже больше не будет показывать на первый элемент строки. Рассмотрим результат работы программы TWOSTR:

Определение через массив
Определение через указатель
определение через указатель

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


1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 |


При использовании материала, поставите ссылку на Студалл.Орг (9.43 сек.)