intptr c что это

Просто что такое IntPtr?

Используя IntelliSense и глядя на код других людей, я столкнулся с этим типом IntPtr ; каждый раз, когда это нужно было использовать, я просто положил null или IntPtr.Zero и нашел большинство функций для работы. Что именно это и когда/почему оно используется?

8 ответов

142 Решение Sam Harwell [2009-07-18 21:15:00]

Это тип значения, достаточно большой для хранения адреса памяти, используемого в собственном или небезопасном коде, но не используемого непосредственно в качестве адреса памяти в безопасном управляемом коде.

35 bufferz [2009-07-18 22:24:00]

Я пишу программу на С#, которая взаимодействует с высокоскоростной камерой. У камеры есть свой собственный драйвер, который приобретает изображения и автоматически загружает их в память компьютера.

Итак, когда я готов принести последнее изображение в свою программу для работы, драйвер камеры предоставит мне IntPtr, где изображение будет УЖЕ сохранено в физической памяти, поэтому мне не нужно тратить время/ресурсы создают еще один блок памяти для хранения изображения, которое уже в памяти. IntPtr просто показывает мне, где изображение уже есть.

31 nobar [2009-11-01 04:47:00]

Прямая интерпретация

Размер IntPtr зависит от платформы, но эту деталь редко нужно учитывать, поскольку система автоматически использует правильный размер.

Альтернативная перспектива

Что такое указатель?

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

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

Представьте свою память программ точно как один большой массив из 65535 байт.

Указатели указывают послушно

Указатели запоминают один адрес памяти каждый, и поэтому каждый указывает на один адрес в памяти.

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

Указатели в С#

В частности, в С# указатель представляет собой целочисленную переменную, которая хранит адрес памяти от 0 до 65534.

Также, для С#, указатели имеют тип int и поэтому подписываются.

Вы не можете использовать отрицательно пронумерованные адреса, хотя вы также не можете получить доступ к адресу выше 65534. Любая попытка сделать это вызовет исключение System.AccessViolationException.

Указатель, называемый MyPointer, объявляется следующим образом:

Пояснительные вещи следует обрабатывать с особой осторожностью

Указатели дают программисту жесткий контроль над системой. Поэтому сделанные ошибки могут иметь более серьезные последствия.

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

Пример небезопасного блока

Как использовать указатели

Когда переменные или объекты объявляются или создаются, они сохраняются в памяти.

Как только адрес присваивается указателю, применяется следующее:

MyPointer = &MyVariable; // Set MyPointer to point at MyVariable

«MyPointer is pointing at » + *MyPointer;

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

Пример использования указателей тщательно и ответственно

Почему это int вместо uint?

Нет веской причины.

Зачем использовать указатели?

Указатели очень забавны. Поскольку большая часть компьютера управляется памятью, указатели предоставляют программисту больше контроля над их программной памятью.

Мониторинг памяти.

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

Измените эти значения ответственно и отслеживайте, как ваши изменения влияют на ваш компьютер.

7 Zyphrax [2009-07-18 21:15:00]

Тип IntPtr предназначен для целое число, размер которого платформы. То есть, экземпляр этого типа ожидается быть 32-битным на 32-разрядном оборудовании и операционных систем и 64-битных 64-разрядные аппаратные и операционные системы.

Тип IntPtr может использоваться языки, поддерживающие указатели, и как общий способ обращения к данным между языками, которые делают и не делают указатели поддержки.

Объекты IntPtr также могут использоваться для удерживайте ручки. Например, примеры IntPtr широко используются в Класс System.IO.FileStream для хранения файловые дескрипторы.

5 ChrisF [2009-07-18 21:14:00]

Первая строка гласит:

Специфичный для платформы тип, который используется для представления указателя или дескриптора.

Что касается указателя или дескриптора, то страница переходит в состояние:

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

Объекты IntPtr также можно использовать для хранения дескрипторов. Например, экземпляры IntPtr широко используются в классе System.IO.FileStream для хранения файловых дескрипторов.

Дескриптор может быть идентификатором объекта и передается между методами/классами, когда обеим сторонам необходим доступ к этому объекту.

0 cdiggins [2019-01-13 19:01:00]

Источник

Что такое IntPtr именно?

С помощью IntelliSense и глядя на код других людей, я столкнулся с этим IntPtr тип; каждый раз, когда он должен был быть использован я просто поставил null или IntPtr.Zero и нашел большинство функций для работы. Что именно это такое и когда/почему оно используется?

Читайте также:  рено сандеро степвей тип кузова какой

7 ответов:

это » родной (специфичный для платформы) размер целого числа.»Это внутренне представлено как void* но представляется как целое число. Вы можете использовать его всякий раз, когда вам нужно хранить неуправляемый указатель и не хотите использовать unsafe код. IntPtr.Zero эффективно NULL (нулевой указатель).

Это тип значения, достаточно большой для хранения адреса памяти, используемого в собственном или небезопасном коде, но не может непосредственно использоваться в качестве адреса памяти в безопасном управляемом коде.

можно использовать IntPtr.Size чтобы узнать, работаете ли вы в 32-битном или 64-битном процессе, так как это будет 4 или 8 байт соответственно.

Я пишу программу на C#, которая взаимодействует с высокоскоростной камеры. Камера имеет свой собственный драйвер, который получает изображения и загружает их в память компьютера автоматически.

поэтому, когда я готов принести последнее изображение в свою программу для работы, драйвер камеры предоставляет мне IntPtr туда, где изображение уже хранится в физической памяти, поэтому мне не нужно тратить время / ресурсы на создание другого блока памяти сохраните изображение, которое уже находится в памяти. IntPtr просто показывает мне, где изображение уже есть.

прямой перевод

An IntPtr это целое который имеет тот же размер, что и указатель.

размер IntPtr зависит от платформы, но эту деталь редко нужно учитывать, так как система автоматически будет использовать правильный размер.

имя «IntPtr» сбивает с толку-что-то вроде Handle было бы более уместно. Моя первоначальная догадка заключалась в том, что» IntPtr » был указателем до целое число. Элемент документация MSDN указателя IntPtr входит в несколько загадочные детали, никогда не давая много понимания о значении имени.

альтернативную точку зрения

An IntPtr указатель с двумя ограничениями:

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

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

представьте себе память вашей программы точно так же, как один большой массив 65535 байт.

указатели указывают послушно

указатели запоминают один адрес памяти каждый, и поэтому каждый из них указывает на один адрес в памяти.

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

указатели в C#

в частности, в C# указатель представляет собой целочисленную переменную, которая хранит адрес памяти между 0 и 65534.

также специфично для C#, указатели имеют тип int и поэтому подписаны.

вы не можете использовать отрицательно пронумерованные адреса, хотя и не можете получить доступ к адресу выше 65534. Любая попытка сделать это бросит систему.AccessViolationException.

указатель под названием MyPointer объявляется как Итак:

указатель в C# является int, но адреса памяти в C# начинаются с 0 и простираются до 65534.

заостренные вещи должны быть обработаны с особой осторожностью

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

указатели дают программисту жесткий контроль над системой. Поэтому ошибки могут иметь более серьезные последствия.

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

пример небезопасного блока

как использовать указатели

когда переменные или объекты объявляются или создаются экземпляры, они хранятся в памяти.

после присвоения указателю адреса применяется следующее:

MyPointer = &MyVariable; // Set MyPointer to point at MyVariable

«MyPointer is pointing at » + *MyPointer;

поскольку указатель-это переменная, содержащая адрес памяти, этот адрес памяти может быть сохранен в переменной указателя.

пример использования указателей тщательно и ответственно

обратите внимание, что тип указателя-int. Это потому, что C# интерпретирует адреса памяти как целые числа (int).

почему это int вместо uint?

зачем использовать указатели?

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

Контроль памяти.

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

измените эти значения ответственно и следите за тем, как ваши изменения влияют на ваш компьютер.

Читайте также:  какой мастикой лучше обработать днище автомобиля снаружи и внутри

тип IntPtr конструирован для того чтобы быть целое число, размер которого платформы. То есть ожидается, что экземпляр этого типа быть 32-битным на 32-битном оборудовании и операционных систем и 64-бит на 64-разрядное оборудование и операционные системы.

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

объекты IntPtr также могут быть использованы для держите ручки. Например, экземпляры указателя IntPtr широко используются в Системы.ИО.Класс FileStream держать дескриптор файла.

тип IntPtr является CLS-совместимым, в то время как тип UIntPtr не является. Только тип IntPtr используется в общем языковая среда выполнения. Тип UIntPtr является в основном для поддержания архитектурная симметрия с IntPtr тип.

первая строка гласит:

тип платформы, используемый для представления указателя или дескриптора.

Что касается указателя или дескриптора, страница переходит к состоянию:

тип IntPtr может быть использован языки, которые поддерживают указатели, и как общее средство ссылки на данные между языками, которые делают и не делают поддержка указатели.

объекты IntPtr также могут быть использованы для держите ручки. Например, экземпляры указателя IntPtr широко используются в Системы.ИО.Класс FileStream держать дескриптор файла.

указатель-это ссылка на область памяти, которая содержит некоторые данные, которые вас интересуют.

дескриптор может быть идентификатором объекта и передается между методов/классов, когда обе стороны должны получить доступ к этому объекту.

Источник

Just what is an IntPtr exactly?

Through using IntelliSense and looking at other people’s code, I have come across this IntPtr type; every time it has needed to be used I have simply put null or IntPtr.Zero and found most functions to work. What exactly is it and when/why is it used?

8 Answers 8

It’s a «native (platform-specific) size integer.» It’s internally represented as void* but exposed as an integer. You can use it whenever you need to store an unmanaged pointer and don’t want to use unsafe code. IntPtr.Zero is effectively NULL (a null pointer).

It’s a value type large enough to store a memory address as used in native or unsafe code, but not directly usable as a memory address in safe managed code.

You can use IntPtr.Size to find out whether you’re running in a 32-bit or 64-bit process, as it will be 4 or 8 bytes respectively.

I’m writing a C# program that interfaces with a high-speed camera. The camera has its own driver that acquires images and loads them into the computer’s memory for me automatically.

So when I’m ready to bring the latest image into my program to work with, the camera driver provides me with an IntPtr to where the image is ALREADY stored in physical memory, so I don’t have to waste time/resources creating another block of memory to store an image that’s in memory already. The IntPtr just shows me where the image already is.

A direct interpretation

An IntPtr is an integer which is the same size as a pointer.

The size of IntPtr is platform-specific, but this detail rarely needs to be considered, since the system will automatically use the correct size.

An alternative perspective

An IntPtr is a pointer with two limitations:

Источник

Int Ptr. Explicit Оператор

Определение

Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.

Преобразует заданный тип данных в значение IntPtr или значение IntPtr в заданный тип данных.

Перегрузки

Преобразует 32-разрядное целочисленное значение со знаком в IntPtr.

Преобразует 64-разрядное целочисленное значение со знаком в IntPtr.

Преобразует значение заданной структуры IntPtr в формат 32-разрядного целого числа со знаком.

Преобразует значение заданной структуры IntPtr в формат 64-разрядного целого числа со знаком.

Преобразует значение заданной структуры IntPtr в указатель на незаданный тип.

Этот интерфейс API CLS-несовместим.

Преобразует заданный указатель на незаданный тип в IntPtr.

Этот интерфейс API CLS-несовместим.

Explicit(Int32 to IntPtr)

Преобразует 32-разрядное целочисленное значение со знаком в IntPtr.

Параметры

32-разрядное знаковое целое число.

Возвращаемое значение

См. также раздел

Применяется к

Explicit(Int64 to IntPtr)

Преобразует 64-разрядное целочисленное значение со знаком в IntPtr.

Параметры

64-разрядное целое число со знаком.

Возвращаемое значение

Исключения

На 32-разрядной платформе значение параметра value слишком велико для представления параметра IntPtr.

Источник

UInt Ptr Структура

Определение

Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.

Читайте также:  me refresh access что это

Этот API несовместим с CLS.

Определяемый платформой тип, который используется для представления указателя или дескриптора.

Комментарии

UIntPtrТип разрабатывается как целое число, размер которого зависит от платформы. То есть экземпляр этого типа должен иметь 32 бит на 32-разрядном оборудовании и операционных системах, а 64-бит на 64-разрядном оборудовании и операционных системах.

IntPtrТип является CLS-совместимым, а UIntPtr тип — нет. IntPtrВ среде CLR используется только тип. UIntPtrТип предоставляется преимущественно для поддержки архитектурной симметрии с IntPtr типом.

UIntPtrТип может использоваться языками, поддерживающими указатели, и как распространенный способ обращения к данным между языками, которые не поддерживают указатели. UIntPtr объекты также можно использовать для хранения дескрипторов.

Конструкторы

Инициализирует новый экземпляр структуры UIntPtr с использованием указанного 32-битового указателя или дескриптора.

Инициализирует новый экземпляр структуры UIntPtr с помощью заданного 64-битового указателя или дескриптора.

Инициализирует новый экземпляр структуры UIntPtr с использованием заданного указателя на незаданный тип.

Доступное только для чтения поле, которое предоставляет указатель или дескриптор, инициализированный с нулевым значением.

Свойства

Представляет наибольшее возможное значение типа UIntPtr.

Представляет минимально допустимое значение типа UIntPtr.

Получает размер этого экземпляра.

Методы

Добавляет смещение к значению указателя без знака.

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

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

Возвращает значение, показывающее, равен ли данный экземпляр заданному объекту.

Указывает, равен ли текущий объект другому объекту того же типа.

Возвращает хэш-код данного экземпляра.

Преобразует доступное только для чтения количество символов в представлении числа по дополнительному указанному стилю и дополнительно указанному формату для определенного языка и региональных параметров в собственный целочисленный эквивалент без знака.

Преобразует строковое представление числа в эквивалентное ему собственное целое число без знака.

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

Преобразует строковое представление числа в указанном формате в эквивалентное ему собственное целое число без знака.

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

Вычитает смещение из значения указателя без знака.

Преобразует значение этого экземпляра в указатель незаданного типа.

Преобразует числовое значение данного экземпляра в эквивалентное ему строковое представление.

Преобразует числовое значение данного экземпляра в эквивалентное ему строковое представление с использованием указанного формата и сведений об особенностях форматирования для данного языка и региональных параметров.

Преобразует числовое значение данного экземпляра в эквивалентное строковое представление с использованием указанного формата.

Форматирует значение текущего экземпляра, используя указанный формат.

Преобразует значение данного экземпляра в 32-битовое целое число без знака.

Преобразует значение данного экземпляра в 64-битовое целое число без знака.

Пытается отформатировать значение текущего экземпляра в указанный диапазон символов.

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

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

Преобразует строковое представление числа в формате, соответствующем стилю, языку и региональным параметрам, в эквивалентное ему собственное целое число без знака. Возвращает значение, указывающее, успешно ли выполнено преобразование.

Преобразует строковое представление числа в эквивалентное ему собственное целое число без знака. Возвращает значение, указывающее, успешно ли выполнено преобразование.

Операторы

Добавляет смещение к значению указателя без знака.

Определяет, равны ли два заданных экземпляра класса UIntPtr.

Преобразует значение 32-битового целого числа без знака в значение типа UIntPtr.

Преобразует значение 64-битового целого числа без знака в значение типа UIntPtr.

Преобразует значение заданного указателя UIntPtr в 32-битовое целое число без знака.

Преобразует значение заданного указателя UIntPtr в 64-битовое целое число без знака.

Преобразует значение заданной структуры UIntPtr в указатель на незаданный тип.

Этот интерфейс API CLS-несовместим.

Преобразует заданный указатель на незаданный тип в UIntPtr.

Этот интерфейс API CLS-несовместим.

Определяет, являются ли два заданных экземпляра класса UIntPtr неравными.

Вычитает смещение из значения указателя без знака.

Явные реализации интерфейса

Возвращает значение, указывающее, равен ли этот экземпляр другому целочисленному указателю без знака.

Заполняет объект SerializationInfo данными, необходимыми для сериализации текущего объекта UIntPtr.

Источник

Сказочный портал