Указатели и модификатор const

Допускается объявление указателей в виде:

const СпецификаторТипа *ИмяУказателя;

СпецификаторТипа *const ИмяУказателя=&ИмяПеременной;

В первом случае не допускается изменять значение переменной через указатель.

Пример:

int a,b;

const int *pa;

pa=&a; // допустимо

a=5; //допустимо

*pa=6; // недопустимо

Во втором случае инициализация обязательна, т.к. адрес, хранимый в переменной ИмяУказателя изменить нельзя, а значение переменной ИмяПеременной через указатель изменить можно.

Пример:

int a,b;

int* const pa=&a;

pa=&b; // недопустимо

a=5; //допустимо

*pa=6; // допустимо

Ссылки

Ссылка также как и указатель хранит адрес некоторого объекта.

Форма записи:

Спецификатор-типа & описатель=ИмяПеременной

Имя переменной должно существовать.

Отличие ссылки от указателя: однажды присвоенное ссылке значение не может быть изменено, т.е. ссылка будет связана только с той ячейкой, адрес которой был присвоен ссылке при инициализации. Значение адреса, хранимого указателем, может быть изменено. Значение переменной, на которую указывает ссылка или указатель можно изменять. Операция взятия адреса допустима к ссылке, а операция разыменования – нет, т.к. для получения содержимого ячейки достаточно обратиться к ссылке по ее имени. Из вышесказанного можно сделать вывод, что ссылка грубо говоря - это указатель с константным значением адреса.

Пример:

#include<iostream.h>

void main()

{

int a=2,b=5;

int &p_a=a;

p_a++; // аналогично a++

cout<<p_a<<endl;

p_a=b; // аналогично a=b

cout<<p_a;

cout<<&p_a; //вывод адреса

}


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: