Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Объявление и инициализация указателей



Указатель – это особый тип переменной, содержащей в памяти адрес того объекта, на который он указывает. При этом имя объекта отсылает к его значению прямо, а указатель косвенно. Поэтому ссылка на значение посредством указателей называется косвенной адресацие й. Смысл использования указателей состоит в том, что, отводя место только для запоминания адреса в памяти, Вы получаете идентификатор (переменную типа указатель), который может ссылаться на любой объект в памяти указанного типа, причем в разный момент указатель может указывать на разные объекты, т.е. не надо перемещать в памяти с места на место кучи байтов, достаточно просто изменить указатель.

Указатель может указывать на любые объекты: переменные, массивы, классы, структуры, и даже на функции. При объявлении указателя необходимо указать тип элемента, на который он будет указывать. Сам указатель занимает ровно столько места, сколько требуется для хранения адреса объекта. Признаком указателя является символ *, который означает, что следующая за ним переменная является указателем. Рассмотрим примеры объявления указателей для различных типов переменных.

int *r; // указатель на целое число

float *f; // указатель на действительное число

char *ch; // указатель на символьную переменную

long *g[10]; // массив из 10 указателей на длинное целое

long (*t)[10]; // указатель на массив из десяти длинных целых

int(*fun)(double,int); // указатель на функцию с именем fun

Для инициализации указателей используется операция присваивания "=". Присваивание начального значения означает, что при определении указателя ему следует присвоить либо адрес объекта, либо адрес конкретного места в памяти, либо число 0. Примеры каждого типа инициализации выглядят так:

1. Присваивание указателю адреса существующего объекта:

· С помощью операции получения адреса:

int a=5; // целая переменная

int *p=&a; // указателю присваивается адрес переменной а

int *p(&a); // то же самое другим способом

· С помощью значения другого инициализированного указателя:

int *r=p;

· С помощью имени массива или функции, которые трактуются как адрес:

int b[10]; // массив

int *t=b; // присвоение адреса начала массива

2. Присваивание указателю адреса области памяти в явном виде:

char *z=(char*)0x00000417;

Здесь 0x00000417 – шестнадцатеричная константа, (char*) – операция приведения константы к типу указатель на char.

3. Присвоение пустого значения:

int *p=0;

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

4. Выделение участка динамической памяти и присвоение ее адреса указателю с помощью операции new:

int *n = new int; // 1

int *m = new int(10); // 2

int *q = new int[10]; // 3

В операторе 1 операция new выполняет выделение достаточного для размещения величины типа int участка динамической памяти и записывает адрес начала этого участка в переменную n. В операторе 2, кроме того, производится инициализация выделенной памяти значением 10. В операторе 3 операция new выделяет память под массив из 10 элементов и записывает адрес начала этого участка в переменную q, которая может трактоваться как имя массива.





Дата публикования: 2015-01-23; Прочитано: 1348 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.006 с)...