
- •Последовательность решения задач на эвм:
- •Состав языка
- •Комментарии
- •Переменные, операции, выражения
- •Базовые алгоритмические конструкции
- •Оператор множественного выбора switch
- •Тернарная условная операция
- •Циклические алгоритмы
- •Операции
- •Операция инкремента и декремента
- •Операции отрицания
- •Операции умножения и деления
- •Операции сдвига
- •Логические операции (&&, ||)
- •Операция присваивания
- •Выражения
- •Работа с памятью Память и указатели
- •Операции адресации и разадресации (&, *)
- •Адресная арифметика
Операции адресации и разадресации (&, *)
Для получения адреса какого – либо объекта используется операция адресации &.
int i;
int *ip = &i; //ip – адрес переменной i
Для доступа к величине по её адресу используется операция разадресации *.
int i = 5;
int *ip = &i;
cout << (*ip); //5
Конструкция *указатель является Lvalue.
1000 1004 1008 1012 1016 1020 1024 1028
int x, *p, *q |
▄▄▄▄ |
? |
▄▄▄▄ |
▄▄▄▄ |
? |
? |
▄▄▄▄ |
… |
|
x |
|
p |
q |
| |||
p = &x; |
▄▄▄▄ |
? |
▄▄▄▄ |
▄▄▄▄ |
1004 |
? |
▄▄▄▄ |
… |
| ||||||||
*p = 125; |
▄▄▄▄ |
125 |
▄▄▄▄ |
▄▄▄▄ |
1004 |
? |
▄▄▄▄ |
… |
| ||||||||
q = p; |
▄▄▄▄ |
125 |
▄▄▄▄ |
▄▄▄▄ |
1004 |
1004 |
▄▄▄▄ |
… |
| ||||||||
(*q) += 10; |
▄▄▄▄ |
135 |
▄▄▄▄ |
▄▄▄▄ |
1004 |
1004 |
▄▄▄▄ |
… |
Адресная арифметика
С указателями можно выполнять следующие арифметически операции:
сложение с константой;
вычитание указателей (только одного типа);
инкремента и дикремента.
При этом автоматически учитывается размер адресуемых величин.
Адресная арифметика используется в основном при работе с адресными структурами, последовательно расположенными в памяти.
Операция инкремента (дикремента) увеличивает (уменьшает) указатель на величину sizeof (тип указателя). При сложении с константой указатель изменяется на величину, равную const * sizeof (тип указателя).
double *p = 1000;
p++; // p = p + sizeof (double) = p + 8 = 1008;
p+=10; // p = p + 10 * sizeof (double) = 1088;
Разность двух указателей равна разности их значений, делённой на размер их в байтах, т.е. количество элементов данного типа между ними. Разность двух указателей – это НЕ указатель, а целое число.
Сложение указателей не допускается.