Студопедия  
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Ссылки. Указатели.

Читайте также:
  1. Адресный тип. Динамическая память. Адреса и указатели.
  2. Массивы и указатели. Динамические объекты. Операции с указателями.
  3. Тема 14: Южная ссылка, Михайловское, После ссылки.

Ссылки.

Можно описать переменные ссылочного типа:

тип & имя=иниц-ия;

где тип-это тип величины, на которую указывает ссылка, &- оператор ссылки, указывающий, что следующее за ним имя явл. именем переменной ссылочного типа.

Правила для использования переменных ссылочного типа:

=переменная ссылочного типа должна инициализироваться при её описании: int k; int &p=k;//ссылка p- альтернативное имя для k.

= после инициализации ссылке не может быть присвоена другая переменная.

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

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

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

 

Указатели.

При описании переменной указывается её тип, имя, м.б. значение. int n=100; Под переменную выделяется место(согласно типу определяется количество байтов), значение 100 записывается в это место в соответствующем типу формате.

Можно определить переменные для хранения адресов областей памяти. Такие переменные называются указателями. Описание указателей:

тип * имя; может содержать некоторое значение, которое присваивается переменной.

= указатель всегда связан с каким-то типом.

= * относится к имени, при описании нескольких указателей ставится перед каждым.

int *k, t, *v; // k,v –указатели на переменную целого типа, а t-переменная целого типа.

= значением, присваиваемым указателю, является обычно адрес некоторого объекта, имеющего имя и размещенного в оперативной памяти (для этого используется операция &-взятия адреса переменной), или имя другого указателя:

int x=10; int *p=&x; int *q=p;

const int * u;//-указатель на константу целого типа

int * const w=&x;// указатель-константа на целую переменную

const int n=200;

const int * const r=&n;//указатель-конст. на конс-ту цел. типа

Операции с указателями.

1) Операция разыменования: * имя_указателя используется для доступа к величине, адрес которой хранится в указателе. Если p –указатель на переменную целого типа int, то *p можно рассматривать как переменную типа int. В примере *p это синоним имени x. *p является L-значением, ей можно присваивать значение целое: *p=20; Операция разыменования имеет самый высокий приоритет(как ++ и --).

2)Некоторые арифметические операции: сложение с константой, вычитание константы из указателя, инкремент, декремент учитывают размер типа величин, адресуемых указателем.

Если int * p; то p+4 следует понимать как p+4*sizeof(int), p++ увеличивает значение p на 4 (p+1*sizeof(int)).

Эти операции имеют смысл для работы с сложными данными, последовательно размещёнными в памяти.

Добавление к теме «Функции»:

Передачу значения в функцию по адресу можно организовать с помощью параметра указателя, например:

Void nod3(int a, int b, int *c) | int main()

{…. | {int x,y,z;

…. | cin>>x>>y;

*c=r1; | nod3(x,y,&z);

} | cout<<z;

| return 0;}

В nod1() также передача значения для с выполнялась по адресу, но в конце стоял оператор с=r1;, а сейчас *c=r1; здесь следует понимать, что и в первом и во втором случаях выполнялось разыменование адреса в с, но в случае со ссылкой транслятор выполнял это разыменование сам и это улучшало читаемость программы,а во втором случае это обязанность программиста.

 

 




Дата добавления: 2014-12-20; просмотров: 29 | Поможем написать вашу работу | Нарушение авторских прав




lektsii.net - Лекции.Нет - 2014-2024 год. (0.006 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав