Tipos de ponteiro (translation from VPE for Csharp Programming guia)

Em um contexto sem segurança, um tipo pode ser um tipo de ponteiro, um tipo de valor ou um tipo de referência.Uma declaração de tipo de ponteiro tem um dos seguintes formatos:

type* identifier;
void* identifier; //allowed but not recommended

Qualquer um dos seguintes tipos podem ser um tipo de ponteiro:

Tipos ponteiro não herdam de objeto Existem e nenhuma conversão entre tipos ponteiro e object. Além disso, conversão boxing e conversão conversão unboxing não oferecem suporte a indicadores.No entanto, você pode converter entre tipos diferentes de ponteiro e entre tipos ponteiro e tipos integrais.

Ao declarar vários ponteiros na mesma declaração, o * é escrita em conjunto com o tipo subjacente apenas, não sistema autônomo um prefixo para cada nome de ponteiro.Por exemplo:

int* p1, p2, p3;   // Ok
int *p1, *p2, *p3;   // Invalid in C#

Um ponteiro não é possível apontar para uma referência ou para um struct que contém referências como uma referência de objeto não pode ser lixo coletado mesmo que um ponteiro esteja apontando para ele.O GC não controlar de se um objeto está sendo apontado por todos os tipos de ponteiro.

O valor da variável de ponteiro do tipo myType* é o endereço de uma variável do tipo myType. Exemplos de declarações de tipo de ponteiro são:

Exemplo

Descrição

int* p

p é um ponteiro para um número inteiro

int** p

p é um ponteiro para um ponteiro para um inteiro

int*[] p

p é uma matriz unidimensional de ponteiros para inteiros

char* p

p é um ponteiro para um caractere

void* p

p é um ponteiro para um tipo desconhecido

O operador de indireção ponteiro * pode ser usado para acessar o Sumário no local apontado pela variável de ponteiro.Por exemplo, considere a seguinte declaração:

int* myVariable;

A expressão *myVariable denota o int variável, visite o endereço contido em myVariable.

Não é possível aplicar o operador de indireção um ponteiro de tipo void*. No entanto, você pode usar a projeção para converter um ponteiro nulo em qualquer Outros tipo de ponteiro e vice-versa.

Um ponteiro pode ser null. Aplicando o operador de caminho indireto a um ponteiro nulo causa um comportamento definido de implementação.

Lembre-se passar ponteiros entre os métodos que pode causar um comportamento indefinido.Exemplos estiver devolvendo um ponteiro para uma variável local por meio de ref ou out parâmetro ou sistema autônomo resultado de função.Se o ponteiro tiver sido definido em um bloco fixo, a variável para o qual ele aponta não pode ser corrigida.

A tabela a seguir lista os operadores e instruções que podem operar em ponteiros em um contexto sem segurança:

Operador/demonstrativo

Uso

*

Executa o ponteiro de indireção.

->

Acessa um membro de uma struct através de um ponteiro.

[]

Indexado um ponteiro.

&

Obtém o endereço de uma variável.

++ e--

Incrementa e decrementa ponteiros.

+ e -

Efetua aritmética de ponteiro.

==, !=, <, >, <=, and >=

Compara ponteiros.

stackalloc

Aloca memória na pilha.

fixed demonstrativo

Corrige temporariamente uma variável de modo que seu endereço pode ser encontrado.

Especificação da linguagem C#

Para obter mais informações, consulte a seção a seguir no Especificação da linguagem C#:

  • 18 código não seguro

Consulte também

Conceitos

Guia de Programação C#

Referência

Não seguro código e ponteiros (guia de programação C#)

Conversões de ponteiro (guia de programação translation from VPE for Csharp)

Ponteiro expressões (guia de programação translation from VPE for Csharp)

(referência C#) não seguros

Instrução fixa (referência C#)

stackalloc (translation from VPE for Csharp Reference)

conversão boxing e conversão conversão unboxing (guia de programação translation from VPE for Csharp)

Outros recursos

Tipos (referência C#)