- •Указатели
- •Указатели — это переменные, которые хранят адреса памяти.
- •Формат объявления переменной- указателя таков:
- •Чтобы объявить переменную р указателем на int-значение, используйте следующую инструкцию.
- •Базовый тип указателя определяет тип данных, на которые он будет
- •Операторы, используемые с указателями
- •Второй оператор работы с указателями (*) служит дополнением к первому (&). Это также
- •Операции, выполняемые с помощью указателей, часто называют операциями непрямого доступа, поскольку мы косвенно
- •Переменные-указатели должны всегда указывать на соответствующий тип данных. Например, при объявлении указателя типа
- •Несмотря на то что, как было заявлено выше, при присваивании два указателя должны
- •// Эта программа не будет выполняться
- •Результат работы программы:
- •При присваивании значения области памяти, адресуемой указателем, его (указатель) можно использовать с левой
- •Чтобы инкрементировать или декрементировать значение, расположенное в области памяти, адресуемой указателем, можно использовать
- •Арифметические операции над указателями
- •Пусть p1 — указатель на int- переменную с текущим значением 2 ООО (т.е.
- •Для операции декрементирования справедливо обратное утверждение, т.е. при каждом декрементировании значение p1 будет
- •Для указателей на символьные значения результат операций инкрементирования и декрементирования будет таким же,
- •Со значениями указателей можно выполнять операции сложения и вычитания, используя в качестве второго
- •Несмотря на то что складывать указатели нельзя, один указатель можно вычесть из другого
- •// Демонстрация арифметических операций
- •0012FE5C 0012FE84 0012FE60 0012FE8C 0012FE64 0012FE94 0012FE68 0012FE9C 0012FE6C 0012FEA4 0012FE70 0012FEAC 0012FE74
- •Узелок на память
- •Указатели и массивы
- •Имя массива без индекса образует
- •если нужно получить доступ к пятому элементу массива str, используйте одно из следующих
- •Арифметические операции над указателями выполняются быстрее, чем индексирование массивов, особенно при доступе к
- •int main()
- •int main()
- •Таблица строк — это таблица, сгенерированная компилятором
- •Значение одного указателя можно сравнивать с другим.
- •Даны два указателя (с именами А и В), которые ссылаются на один и
- •int main()
- •Массивы указателей
- •Чтобы присвоить значение переменной var целочисленной переменной х с помощью массива ipa, используйте
- •Объявленный, но не инициализированный указатель будет содержать произвольное значение.
- •Если указатель содержит нулевое значение, считается, что он ни на что не ссылается
- •Для тестирования указателя используется инструкция if (любой из следующих ее вариантов).
- •Можно создать указатель, который будет ссылаться на другой указатель, а тот — на
- •Переменную, которая является указателем на указатель, нужно объявить соответствующим образом. Для этого достаточно
- •// Использование многоуровневой
- •Неинициализированные указатели
- •Некорректное сравнение указателей
- •int first[10]; int second[10]; int *p, t;
- •Не забывайте об установке указателей
- •Узелок на память.
Указатели и массивы
char str[80];
char *p1;
p1 = str;
после этого присваивания p1 будет указывать на элемент str[0].
Имя массива без индекса образует
указатель на начало этого
массива.
если нужно получить доступ к пятому элементу массива str, используйте одно из следующих выражений:
str[4]
или
*(p1+4)
Необходимость использования круглых скобок, в которые заключено выражение p1+4, обусловлена тем, что оператор "*" имеет более высокий приоритет, чем оператор "+".
*(p1+4) ; *p1+4
Без этих круглых скобок выражение бы свелось к получению значения, адресуемого указателем p1, т.е. значения первого элемента массива,
Арифметические операции над указателями выполняются быстрее, чем индексирование массивов, особенно при доступе к элементам, расположение которых отличается строгой упорядоченностью. Поскольку быстродействие часто является определяющим фактором при выборе тех или иных решений в программировании, то использование указателей для
int main()
{
char str[80]; char token[80];
char *p, *q;
cout << "Введите предложение: ";
gets(str);
p = str;
// Считываем лексему из строки.
while(*р)
{
q = token; // Устанавливаем q для указания на началоwhile(*p != ' ' && *р)
{
*q = *р;
q++; р++;
}
if(*p) р++; // Перемещаемся за пробел.
*q = |
'\0'; // |
Завершаем лексему нулевым символом. |
cout |
<< token |
<< '\n'; |
}
return 0;
}
int main()
{
char str[80]; char token[80];
int i, j;
cout << "Введите предложение: ";
gets(str);
// Считываем лексему из строки.
for(i=0; ; i++)
{
for(j=0; str[i]!=' ' && str[i]; j++, i++)
token[j] = str[i];
token[j] = '\0'; // Завершаем лексему
нулевым символом.
cout << token << '\n';
if(!str[i]) break;
}
return 0;
}
#include <iostream> #include <cctype> using namespace std; int main()
{
char str[20] = "I love you";
char *p;
int i;
p = str;
// Индексируем указатель.
for(i=0; p[i]; i++)
p[i] = toupper(p[i]);
cout << p; // Отображаем строку.
return 0;
}
Если С++-компилятор обнаруживает строковый литерал, он сохраняет его в таблице строк программы и генерирует указатель на нужную строку.
#include <iostream> using namespace std; int main()
{
char *s;
s = "Работа с указателями - сплошное
удовольствие!\n";
cout << s;
return 0;
}
Таблица строк — это таблица, сгенерированная компилятором
для хранения строк, используемых
в программе.