Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lekcii_1_10 / Лекция 06.pptx
Скачиваний:
39
Добавлен:
21.05.2015
Размер:
589.2 Кб
Скачать

Переменные-указатели должны всегда указывать на соответствующий тип данных. Например, при объявлении указателя типа int компилятор "предполагает", что все значения, на которые ссылается этот указатель, имеют тип int.

int *р; double f;

// ...

р = &f; // ОШИБКА!

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

int *р; double f; // ...

р = (int *) &f; // Теперь все ОК!

// Эта программа не будет выполняться

правильно.

#include <iostream> using namespace std; int main()

{

double x, у; int *p;

x = 123.23;

p = (int *) &x; // Используем операцию приведения типов для присваивания double-

указателя int-указателю.

у = *p; // Что происходит при выполнении этой

инструкции?

cout << у; // Что выведет эта инструкция return 0;

}

Результат работы программы:

1.37439e+09

При присваивании значения области памяти, адресуемой указателем, его (указатель) можно использовать с левой стороны от оператора присваивания. Например, при выполнении следующей инструкции (если р — указатель на целочисленный тип)

*р = 101;

число 101 присваивается области памяти, адресуемой указателем р.

Таким образом, эту инструкцию можно

Чтобы инкрементировать или декрементировать значение, расположенное в области памяти, адресуемой указателем, можно использовать инструкцию, подобную следующей.

(*р)++;

#include <iostream> 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

Арифметические операции над указателями

С указателями можно использовать только четыре арифметических оператора:

++, --,

+,

-.

Пусть p1 — указатель на int- переменную с текущим значением 2 ООО (т.е. p1 содержит адрес 2

ООО).

После выполнения (в 32-разрядной среде) выражения

p1++;

содержимое переменной- указателя p1 станет равным 2 004, а не 2 001! Дело в том, что при каждом инкрементировании

Для операции декрементирования справедливо обратное утверждение, т.е. при каждом декрементировании значение p1 будет уменьшаться на 4. Например, после выполнения инструкции

p1--;

указатель p1 будет иметь значение 1 996, если до этого оно было равно 2 000.

Соседние файлы в папке lekcii_1_10