Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Voprosy_po_lektsiam_6_9.doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
351 Кб
Скачать
  1. Определите понятие «ссылка». Как инициализировать ссылку? (л.9)

Как мы уже знаем, ссылка, в отличие от указателя, не занимает дополнительного пространства в памяти и является просто другим именем переменной:

Инициализация ссылки:

int i = 0;

int &rint = i; // ссылка rint синоним переменной i

int *pint = &i; // указатель pint

// int &jj = 1; error!!!

const int j(17);

// int& jjj = j; error!!!

//ссылка на переменную не может инициализироваться константой; компилятор // предполагает последующее изменение величин, на которые ссылаются jj и jjj const char& CR = ‘\n’; // ок!!! CR – ссылка на симв.константу инициализируется симв.константой !!!

  1. Как изменить значение ссылки после инициализации? Можно ли построить ссылку на ссылку? указатель на ссылку? (л.9)

Изменить значение ссылки после инициализации нельзя.

int ii=1; //но можно так:

int& rr = ii;

rr++; // ii увеличивается на 1

int *p = &rr; // p указывает на ii;

cout << *p << endl; // 2

int ii=1;

int& rr = ii;

int &p = rr; // p указывает на ii;

cout << p << endl;

Правила работы со ссылками:

  • ссылка не может существовать сама по себе – она связана с переменной и у нее даже нет своего адреса (если взять адрес ссылки, то получим адрес связанной с ней переменной).

  • ссылку можно только создать; затем работать мы будем не со ссылкой, а с самой переменной.

  • тип ссылки должен совпадать с типом величины, на которую она ссылается;

  • ссылка явно инициализируется при ее описании (кроме случаев, когда она является параметром функции, описана как extern или ссылается на поле данных класса);

  • ссылку можно рассматривать как указатель, который всегда разыменовывается;

  • изменить значение ссылки после инициализации нельзя;

  • на данную переменную может быть объявлено несколько ссылок.

  • в отличие от указателя, ссылка после инициализации не может быть изменена, чтобы представлять другую переменную;

  • неконстантная переменная-ссылка не может ссылаться на константную величину;

  • указатель можно инициализировать адресом ссылки;

  • не разрешается определять указатели на ссылки, создавать массивы ссылок и ссылки на ссылки;

  • ссылки применяются чаще всего в качестве параметров функций и типов значений, возвращаемых функциями.

  • ссылку нельзя уничтожить, она может «умереть» только своей смертью (например, когда программа выйдет из локального блока, где ссылка объявлена).

  1. Виды указателей (указатель на константу, константный указатель, константный указатель на константу) и их особенности (л.9) . Виды указателей указатель на константу

int var1=5, *pvar1=&var1;

int var2=6;

const int cvar1 = 1; // cvar1 – целая константа

// pcvar1, pcvar11 – указатели на константу

const int *pcvar1 = &cvar1; // const запрещает изменение значения *pcvar1

c onst int *pcvar11 = &var2; // const запрещает изменение значения *pcvar11

cout << *pvar1 << " " << *pcvar1 << " " << *pcvar11 << endl; // 5 1 6

// *pcvar11=*pvar1; // error!!! l-value specifies const object

// *pcvar1=*pcvar11; // error!!! l-value specifies const object

pcvar11 = pcvar1; // OK!!! изменение самого указателя разрешено

pcvar1 = pvar1; // OK!!! изменение самого указателя разрешено

cout << *pvar1 << " " << *pcvar1 << " " << *pcvar11 << endl; // 5 5 1