Программирование. Принципы и практика использования C++ Исправленное издание, стр. 412
}Или еще проще:
if (p2) { // "если указатель корректный" // используйте значение *p2}См. разделы 17.4 и 18.5.4.
Перечислим операции над указателями на объекты (не
void<<=>>+
Подчеркнем, что операции арифметики указателей (например,
++pp+=7Только операции над указателем типа
void*Указатель на функцию (см. раздел 27.2.5) можно только копировать и вызывать. Рассмотрим пример.
typedef void (*Handle_type)(int);void my_handler(int);Handle_type handle = my_handler;handle(10); // эквивалент my_handler(10)A.8.2. Массивы
Массив (array) — это неразрывная последовательность объектов (элементов) одинакового типа, имеющая фиксированную длину.
int a[10]; // 10 целых чиселЕсли массив является глобальным, то его элементы могут быть инициализированы соответствующим значением, принятым для данного типа по умолчанию. Например, значение
a[7]0newИмя массива неявно преобразуется в указатель на его первый элемент. Рассмотрим пример.
int* p = a; // указатель p ссылается на элемент a[0]Массив или указатель на элемент массива может индексироваться с помощью оператора
[]a[7] = 9;int xx = p[6];Элементы массива нумеруются начиная с нуля (разделы 18.5).
Диапазон индексов массива не проверяется. Кроме того, поскольку они часто передаются с помощью указателей, информация, необходимая для проверки диапазона, передается пользователям ненадежным способом. Рекомендуем использовать класс
vectorint a[max]; // sizeof(a) == sizeof(int)*maxМожно определить и использовать массив массивов (двумерный массив), массив массивов массивов (многомерный массив) и т.д. Рассмотрим пример.
double da[100][200][300]; // 300 элементов типа, состоящего изda[7][9][11] = 0;Нетривиальное использование многомерных массивов — тонкое и уязвимое для ошибок дело (см. раздел 24.4). Если у вас есть выбор, следует предпочесть класс
MatrixA.8.3. Ссылки
Ссылка (reference) — это синоним (alias), т.е. альтернативное имя объекта.
int a = 7;int& r = a;r = 8; // переменная a становится равной 8Ссылки часто используются в качестве параметров функций, чтобы предотвратить копирование.
void f(const string& s);// ...f("эту строку слишком дорого копировать, \\ поэтому используется ссылка");См. разделы 8.5.4–8.5.6.
A.9. Функции
Функция (function) — это именованный фрагмент кода, получающий (возможно, пустой) набор аргументов и (необязательно) возвращающий значение. Функция объявляется с помощью указания типа возвращаемого значения, за которым следует ее имя и список параметров.
char f(string, int);Итак,
fstringintcharchar f(string s, int i) { return s[i]; }Телом функции должен быть блок (см. раздел 8.2) или блок
tryФункция, в объявлении которой указано, что она возвращает какое-то значение, должна его возвращать (используя оператор
returnchar f(string s, int i) { char c = s[i]; } // ошибка: ничего // не возвращаетсяФункция
main()main()voidvoidvoid increment(int& x) { ++x; } // OK: возвращать значение