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

Можно создать указатель, который будет ссылаться на другой указатель, а тот — на конечное значение. Эту ситуацию называют

многоуровневой непрямой адресацией (multiple indirection) или использованием указателя на указатель.

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

// Использование многоуровневой

непрямой адресации.

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

{

int x, *p, **q;

x = 10;

p = &x;

q = &p;

cout << **q; // Выводим значение

переменной x.

return 0;

}

Неинициализированные указатели

// Эта программа некорректна.

int main()

{

int х, *р;

х = 10;

*р = х;

//На что указывает переменная р?

return 0;

}

Некорректное сравнение указателей

char s[80]; char у[80]; char *p1, *р2; p1 = s;

р2 = у;

if(p1 < р2) . . .

int first[10]; int second[10]; int *p, t;

p = first; for(t=0; t<20; ++t)

{

*p = t;

p++;

}

Не забывайте об установке указателей

// Эта программа некорректна. #include <iostream>

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

{

char s [80];

char *p1;

p1 = s;

do {

cout << "Введите строку: ";

gets(p1); // Считываем строку.

// Выводим ASCII-значения каждого символа.

while(*p1) cout << (int) *p1++ << ' ';

cout << ' \n';

}while(strcmp (s, "конец"));

return 0;

}

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

{

char s[80];

char *p1;

do {

p1 = s; // Устанавливаем p1 при каждой итерации

цикла.

cout << "Введите строку: ";

gets(p1); // Считываем строку.

// Выводим ASCII-значения каждого символа.

while(*p1) cout << (int) *p1++ <<' ';

cout << '\n';

}while(strcmp(s, "конец"));

return 0;

}

Узелок на память.

Чтобы использование указателей

было безопасным, нужно в любой момент знать, на что они ссылаются.

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