Лекция 10. Общие понятия. Типы указателей. Управляемые и неуправляемые указатели. Указатели на функцию. Примеры использования



жүктеу 112.88 Kb.
бет9/12
Дата10.11.2022
өлшемі112.88 Kb.
#23641
түріЛекция
1   ...   4   5   6   7   8   9   10   11   12
Лекция 10
11 лекция
Глобальные переменные находятся в статической области памяти программы и располагаются по возрастанию адресов (рис. 1 –стрелка 1).
double a=2.5,b=0.9;
int main() {
double *q = &a;
cout<<" &a="<<" &b="<

Машинный адрес переменной а - 0x404010. То есть в памяти компьютера есть адрес 0x404010, по которому располагается переменная а.


Локальные переменные располагаются в автоматической памяти. Автоматическая память организована как стек вызовов подпрограмм. Стек начинается с адреса, имеющего максимальное значение. В процессе выполнения стек растет в сторону уменьшения адресов (рис.1– стрелка 2).
int k=7,m=5,n;
int *p = &k;
cout <<" &k="<


При передаче параметров по значению создаются копии фактических параметров, которые размещаются на стеке (рис.1–стрелка 3).
int my_max(int a, int b) {
cout<<" &a="<<&a<<" &b="<<&b<return (a>b)? a:b;
}
При передаче по ссылке функция получает адрес переменной (фактического параметра) и тоже размещает его на стеке (рис. 1–стрелка 4). void my_swap(double &a, double &b) {
double r = a;
double *t = &a;
cout<<"&a="<a=b:
b=r;
}
10.3.6. Константные указатели
Чтобы избежать ошибок использования указателей, связанных с передачей параметров и адресной арифметикой, важно понимать различие между константным указателем и указателем на константу. Различия в синтаксисе определяются положением ключевого слова const при объявлении указателя.

Указатель на константу

Константный указатель

const <тип> * <имя>

<тип> * const <имя>

<тип> * const <имя>




Рассмотрим примеры, демонстрирующих корректное использование указателей на константу и константных указателей и типичные ошибки при работе с ними.


int a=100; int b=222;


int *const P2=&a; //Константный указатель
*P2=987; //Менять значение разрешено,
//P2=&b; //но изменять адрес не разрешается

const int *P1=&a; //Указатель на константу


//*P1=110; //Менять значение нельзя,
P1=&b; //но менять адрес разрешено
const int *const P3=&a; //Константный указатель на константу
//*P3=155; //Изменять нельзя: ни значение
//P3=&b; ни адрес, к которому такой
//указатель привязан

Неправильное использование константных указателей и указателй на константу вызывает ошибку компиляции.





жүктеу 112.88 Kb.

Поделитесь с Вашими друзьями:
1   ...   4   5   6   7   8   9   10   11   12




©emirb.org 2022
әкімшілігінің қараңыз

    Басты бет