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:
SByte, byte, curto, ushort, int, uint, longo, ULong, char, float, duplo, decimal, ou bool.
Any Enum tipo.
Qualquer tipo de ponteiro.
Qualquer tipo de struct definida pelo usuário que contém campos apenas tipos não gerenciados.
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
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)
Instrução fixa (referência C#)
stackalloc (translation from VPE for Csharp Reference)