Читаем C# 4.0 полное руководство - 2011 полностью

Указатели могут быть организованы в массивы, как и любой другой тип данных. Ниже приведен пример объявления массива указателей типа int длиной в три элемента.

int * [] ptrs = new int * [3];

Для того чтобы присвоить адрес переменной var типа int третьему элементу массива указателей, достаточно написать следующую строку кода.

ptrs[2] = &var

А для того чтобы обнаружить значение переменной var, достаточно написать приведенную ниже строку кода.

*ptrs[2]

Оператор sizeof

Во время работы с небезопасным кодом иногда полезно знать размер в байтах одного из встроенных в C# типов значений. Для получения этой информации служит оператор sizeof. Ниже приведена его общая форма:

sizeof(тип)

гдетипобозначает тот тип, размер которого требуется получить. Вообще говоря, оператор sizeof предназначен главным образом для особых случаев и, в частности, для работы со смешанным кодом: управляемым и неуправляемым.

Оператор stackalloc

Для распределения памяти, выделенной под стек, служит оператор stackalloc. Им можно пользоваться лишь при инициализации локальных переменных. Ниже приведена общая форма этого оператора:тип*р = stackallocтип [размер]

гдеробозначает указатель, получающий адрес области памяти, достаточной для хранения объектов, имеющих указанныйтип,в количестве, которое обозначаетразмер.Если же в стеке недостаточно места для распределения памяти, то генерируется исключениеSystem. StackOverflowException.И наконец, операторstackallocможно использовать только в небезопасном коде.

Как правило, память для объектов выделяется из кучи — динамически распределяемой свободной области памяти. А выделение памяти из стека является исключением. Ведь переменные, располагаемые в стеке, не удаляются средствами "сборки мусора", а существуют только в течение времени выполнения метода, в котором они объявляются. После возврата из метода выделенная память освобождается. Преимущество применения оператораstackallocзаключается, в частности, в том, что в этом случае не нужно беспокоиться об очистке памяти средствами "сборки мусора".

Ниже приведен пример применения оператораstackalloc*

// Продемонстрировать применение оператора stackalloc.

using System;

class UseStackAlloc {

unsafe static void Main {

int* ptrs = stackalloc int[3];

ptrs[0] = 1; ptrs[1] = 2; ptrs[2] = 3;

for(int i=0; i < 3; i++)

Console.WriteLine(ptrs[i]);

}

}

Вот к какому результату приводит выполнение кода из данного примера.

1

2

3

Создание буферов фиксированного размера

Перейти на страницу:

Похожие книги

Access 2002: Самоучитель
Access 2002: Самоучитель

В книге рассматривается широкий круг вопросов, связанных с использованием программной среды Access 2002, которая является составной частью пакета Office 2002 и предназначена для создания банка данных в самых различных предметных областях.Подробно описывается методика проектирования объектов базы данных (таблицы, формы, отчеты, страницы доступа к данным, запросы, модули).Детально обсуждаются вопросы создания интегрированной базы данных в единой среде Access 2002: формирование БД с нуля, конвертирование в программную среду баз данных, созданных в ином программном окружении – Clarion, FoxPro.Особое внимание уделяется формированию разнообразных запросов к интегрированной базе данных Access 2002 с использованием языков программирования SQL, VBA и макросов.Приводятся общие сведения о возможностях языка обмена данными между различными компьютерами и приложениями (XML). Описываются возможности использования гиперссылок, связывающих базу данных с другими программными продуктами. Объясняется, как можно работать с базой данных Access 2002 без установки ее на компьютер, используя технологию ODBC (Open Data Base Connectivity). В приложениях приводятся количественные параметры Access 2002 и связанная с этой СУБД терминология.Предлагаемая книга будет полезна специалистам, занимающимся практической разработкой банков данных и приложений на их основе, а также студентам вузов, изучающим информатику.

Павел Юрьевич Дубнов

Программирование, программы, базы данных / ОС и Сети / Книги по IT