Указатели предназначены для хранения адресов областей памяти. Синтаксис объявления указателя:
тип* переменная;
Здесь тип — это тип величины, на которую указывает переменная, то есть величины, хранящейся по записанному в переменной адресу. Тип не может быть классом, но может быть структурой, перечислением, указателем, а также одним из стандартных типов: sbyte, byte, short, ushort, int, uint, long, ulong, char, float, double, decimal, bool и void. Последнее означает, что указатель ссылается на переменную неизвестного типа.
Указатель на тип void применяется в тех случаях, когда конкретный тип объекта, адрес которого требуется хранить, не определен (например, если в одной и той же переменной в разные моменты времени требуется хранить адреса объектов различных типов).
Указателю на тип void можно присвоить значение указателя любого типа, а также сравнивать его с любыми указателями, но перед выполнением каких-либо действий с областью памяти, на которую он ссылается, требуется преобразовать его к конкретному типу явным образом.
|
|
Примеры объявления указателей:
int* a; // указатель на int
Node* pNode; // указатель на описанную ранее структуру Node
void* p; // указатель на неопределенный тип
int*[] m; // одномерный массив указателей на int
int** d; // указатель на указатель на int
В одном операторе можно описать несколько указателей одного и того же типа, например:
int* a, b, с; // три указателя на int
Указатели являются отдельной категорией типов данных. Они не наследуются от типа object, и преобразование между типом object и типами указателей невозможно. В частности, для них не выполняется упаковка и распаковка. Однако допускаются преобразования между разными типами указателей, а также указателями и целыми.
ПРИМЕЧАНИЕ
Именно потому что указатели могут содержать адрес любой области памяти и, следовательно, изменить ее, операции с ними и называются небезопасными.
Величины типа указателя могут являться локальными переменными, полями, параметрами и возвращаемым значением функции. Эти величины подчиняются общим правилам определения области действия и времени жизни.