double f;
// ...
р = &f // ОШИБКА!
Некорректность этого фрагмента состоит в недопустимости присваивания
Несмотря на то что, как было заявлено выше, при присваивании два указателя должны быть совместимы по типу, это серьезное ограничение можно преодолеть (правда, на свой страх и риск) с помощью операции приведения типов. Например, следующий фрагмент кода теперь формально корректен.
int *р;
double f;
// ...
р = (int *) &f // Теперь формально все ОК!
Операция приведения к типу (
Чтобы лучше понять, почему использование операции приведения типов при присваивании одного указателя другому не всегда приемлемо, рассмотрим следующую программу.
// Эта программа не будет выполняться правильно.
#include
using namespace std;
int main()
{
double x, у;
int *p;
x = 123.23;
p = (int *) &x // Используем операцию приведения типов для присваивания double-указателя int-указателю.
у = *р; // Что происходит при выполнении этой инструкции?
cout << у; // Что выведет эта инструкция?
return 0;
}
Как видите, в этой программе переменной
При присваивании значения области памяти, адресуемой указателем, его (указатель) можно использовать с левой стороны от оператора присваивания. Например, при выполнении следующей инструкции (если
*р = 101;
число
(*р)++;
Круглые скобки здесь обязательны, поскольку оператор
Присваивание значений с использованием указателей демонстрируется в следующей программе.
#include
using namespace std;
int main()
{
int *p, num;
p = #
*p = 100;
cout << num << ' ';
(*p)++;
cout << num << ' ';
(*p)--;
cout << num << '\n';
return 0;
}
Вот такие результаты генерирует эта программа.
100 101 100
Указатели можно использовать в большинстве допустимых в C++ выражений. Но при этом следует применять некоторые специальные правила и не забывать, что некоторые части таких выражений необходимо заключать в круглые скобки, чтобы гарантированно получить желаемый результат.
С указателями можно использовать только четыре арифметических оператора:
p1++;
содержимое переменной-указателя
p1--;
Бьёрн Страуструп , Ирина Сергеевна Козлова , Бьерн Страуструп , Валерий Федорович Альмухаметов
Программирование, программы, базы данных / Базы данных / Программирование / Учебная и научная литература / Образование и наука / Книги по IT