Читайте также: |
|
Ссылки.
Можно описать переменные ссылочного типа:
тип & имя=иниц-ия;
где тип-это тип величины, на которую указывает ссылка, &- оператор ссылки, указывающий, что следующее за ним имя явл. именем переменной ссылочного типа.
Правила для использования переменных ссылочного типа:
=переменная ссылочного типа должна инициализироваться при её описании: 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 | Поможем написать вашу работу | Нарушение авторских прав |