Compartilhar via


Tipos de ponteiro (C# Programming Guide)

Em um contexto, 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 leva a uma das seguintes formas:

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

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

Tipos de ponteiro não herdam de objeto e nenhuma conversão existe entre tipos de ponteiro e object.Além disso, boxing e unboxing não suportam ponteiros.No entanto, você pode converter entre tipos diferentes de ponteiro e entre tipos de ponteiro e tipos integrais.

Quando você declara vários ponteiros na mesma declaração, o * é gravado em conjunto com o tipo subjacente apenas, não como um prefixo de nome de cada 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 uma struct que contém referências como uma referência de objeto pode ser lixo coletado, mesmo que um ponteiro estiver 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 do tipo ponteiro myType* é o endereço de uma variável do tipo myType.A seguir é exemplos de declarações de tipo de ponteiro:

Exemplo

Descrição

int* p

p é um ponteiro para um 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 char.

void* p

p é um ponteiro para um tipo desconhecido

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

int* myVariable;

A expressão *myVariable indica o int , visite o endereço contido na variável de myVariable.

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

Um ponteiro pode ser null.Aplicar o operador de indireção para um ponteiro nulo faz com que um comportamento definidos na implementação.

Lembre-se de que a passagem de ponteiros entre métodos pode causar um comportamento indefinido.Exemplos estão retornando um ponteiro para uma variável local por meio de Out ou Ref parâmetro ou como o resultado da função.Se o ponteiro foi 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:

Operador/instrução.

Uso

*

Executa indireção do ponteiro.

->

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

[]

Indexado um ponteiro.

&

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

+ + e -

Ponteiros incrementa e diminui.

+ e -

Efetua aritmética de ponteiro.

= =,! =, <>,, < =, e > =

Compara os ponteiros.

stackalloc

Aloca memória na pilha.

fixedinstrução

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

Especificação da linguagem C#

Para obter mais informações, consulte Especificação de linguagem do C# A especificação da linguagem é a fonte definitiva para a sintaxe e o uso da linguagem C#.

Consulte também

Referência

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

Conversões de ponteiro (guia de programação do C#)

Expressões de ponteiro (guia de programação do C#)

não seguros (C# Reference)

Instrução fixed (referência de C#)

stackalloc (referência de C#)

Boxing e Unboxing (C# Guia de programação)

Conceitos

Guia de programação do C#

Outros recursos

Tipos (referência de C#)