Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
c#_Presentation_8.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
143.87 Кб
Скачать

8. Указатели

(http://msdn.microsoft.com/ru-ru/library/y31yhkeb.aspx)

Формат объявления указателя:

тип* идентификатор;

Примеры объявлений указателей различных типов:

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

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

int*[] p // p - одномерный массив указателей на целые числа

char* p // p - указатель на символ

void* p // p - указатель на неизвестный тип

Примеры объявления нескольких указателей в одном объявлении:

int* p1, p2, p3; // Правильное объявление указателей

int *p1, *p2, *p3; // Неправильное объявление указателей

Пример использования косвенного оператора указателя * для доступа к содержимому, на которое указывает переменная указателя:

int* myVariable;

Выражение *myVariable означает переменную типа int, находящуюся по адресу, содержащемуся в myVariable.

Таблица 1. Операторы, используемые с указателями

Оператор

Применение

*

Косвенный оператор указателя.

>

Доступ к члену структуры через указатель.

[ ]

Индексирование указателя.

&

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

+ + и – –

Приращение и уменьшение указателей.

Оператор + и

Арифметические действия указателя.

==, !=, <, >, <= и >=

Сравнение указателей.

stackalloc

Выделение памяти в стеке.

Оператор fixed

Временная фиксация переменной, чтобы можно было найти ее адрес.

8.1. Выражения указателей

8.1.1. Получение значения переменной указателя

Пример использования косвенного оператора указателя для получения переменной, адрес которой содержится в указателе (где p – указатель):

*p;

Пример 8.1. Получение доступа к переменной типа char указателями различных типов.

// Компилировать с /unsafe

unsafe class TestClass

{ static void Main()

{ char theChar = 'Z';

char* pChar = &theChar;

void* pVoid = pChar;

int* pInt = (int*)pVoid;

System.Console.WriteLine("Значение theChar = {0}", theChar);

System.Console.WriteLine("Адрес theChar = {0:X2}", (int)pChar);

System.Console.WriteLine("Значение pChar = {0}", *pChar);

System.Console.WriteLine("Значение pInt = {0}", *pInt);

System.Console.ReadLine();

}

}

/* Вывод:

Значение theChar = Z

Адрес theChar = 3EDECC4

Значение pChar = Z

Значение pInt = 90

*/

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

Использование оператора получения адреса &:

Int number;

int* p = &number; // Операция получения адреса &

Пример 8.2. Объявление указателя на int p и ему присваивается адрес целочисленной переменной number.

// Компилировать с /unsafe

class AddressOfOperator

{ static void Main()

{ int number;

unsafe

{ int* p = &number; // Назначение адреса числа указателю

*p = 0xffff; // Комментирование удаляет инициализацию числа

System.Console.WriteLine("Значение, на которое указывает p:"

+ " {0:X}", *p);

System.Console.WriteLine("Адрес, сохраненный в p: {0}",

(int)p);

}

System.Console.WriteLine("Значение переменной number: {0:X}",

number);

System.Console.ReadLine();

}

}

/* Вывод:

Значение, на которое указывает p: FFFF (после комментария – 0)

Адрес, сохраненный в p: 63827140

Значение переменной number: FFFF (после комментария – 0)

*/

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]