logo
CSharp_Prog_Guide

Получение адреса переменной

Чтобы получить адрес унарного выражения (которое оценивается как фиксированная переменная), используйте оператор address-of:

int number;

int* p = &number; //address-of operator &

Оператор address-of можно применять только к переменной. Если переменная является перемещаемой, можно использовать фиксированное предложение, чтобы временно зафиксировать переменную перед получением ее адреса.

Разработчик отвечает за инициализацию переменной. Если переменная не будет инициализирована, на компиляторе не будет отображено сообщение об ошибке.

Невозможно получить адрес константы или переменной.

Пример

В данном примере указатель на int, p объявляется и ему присваивается адрес целочисленной переменной number. Переменная number инициализируется в результате присвоения *p. Если в тексте кода закомментировать присвоение, то инициализация переменной number будет удалена, однако при компиляции не возникнет сообщений об ошибках. Обратите внимание на применение оператора доступа члена -> для получения и отображения адреса, хранящегося в указателе.

-----

How to: Access a Member with a Pointer

To access a member of a struct that is declared in an unsafe context, you can use the member access operator as shown in the following example in which p is a pointer to a struct that contains a member x.

CoOrds* p = &home;

p -> x = 25; //member access operator ->

Example

In this example, a struct, CoOrds, that contains the two coordinates x and y is declared and instantiated. By using the member access operator -> and a pointer to the instance home, x and y are assigned values.

Note:

Notice that the expression p->x is equivalent to the expression (*p).x, and you can obtain the same result by using either of the two expressions.

// compile with: /unsafe

struct CoOrds

{

public int x;

public int y;

}

class AccessMembers

{

static void Main()

{

CoOrds home;

unsafe

{

CoOrds* p = &home;

p->x = 25;

p->y = 12;

System.Console.WriteLine("The coordinates are: x={0}, y={1}", p->x, p->y );

}

}

}