Operações de aritméticas em ponteiros (guia de programação translation from VPE for Csharp)
Este tópico discute usando os operadores aritméticos + e - para manipular ponteiros.
Observação: |
---|
Não é possível executar quaisquer operações aritméticas nos ponteiros void. |
Adição e subtração valores numéricos para ou de ponteiros
Você pode adicionar um valor de n do tipo int, uint, longo, or ULong para um ponteiro, p,de qualquer tipo, exceto void*. O resultado p+n é o ponteiro resultante da adição n * sizeof(p) to the address of p. Da mesma forma, p-n é o ponteiro resultantes de subtração n * sizeof(p) do endereço do p.
Subtração de ponteiros
Você também pode subtrair ponteiros do mesmo tipo.O resultado é sempre do tipo long. Por exemplo, se p1 e p2 são ponteiros do tipo pointer-type*, em seguida, a expressão p1-p2 resultados em:
((long)p1 - (long)p2)/sizeof(pointer_type)
Não permitir exceções são geradas quando a operação aritmética estoura o domínio do ponteiro e o resultado depende a implementação.
Exemplo
// compile with: /unsafe
class PointerArithmetic
{
unsafe static void Main()
{
int* memory = stackalloc int[30];
long* difference;
int* p1 = &memory[4];
int* p2 = &memory[10];
difference = (long*)(p2 - p1);
System.Console.WriteLine("The difference is: {0}", (long)difference);
}
}
// Output: The difference is: 6
Especificação da linguagem C#
Para obter mais informações, consulte as seções a seguir no Especificação da linguagem C#:
- 18.5.6 Aritmética de ponteiro
Consulte também
Conceitos
Referência
Não seguro código e ponteiros (guia de programação C#)
Ponteiro expressões (guia de programação translation from VPE for Csharp)
Manipulação de ponteiros (guia de programação translation from VPE for Csharp)
Tipos de ponteiro (translation from VPE for Csharp Programming guia)
Instrução fixa (referência C#)
stackalloc (translation from VPE for Csharp Reference)