Operações aritméticas em ponteiros (guia de programação de C#)
Este tópico aborda o uso de operadores aritméticos + e – para manipular ponteiros.
Observação |
---|
Você não pode executar quaisquer operações aritméticas nos ponteiros void. |
Adição e subtração de valores numéricos para ou de ponteiros
Você pode adicionar um valor n do tipo int, uint, longo, ou ulong para um ponteiro, p,de qualquer tipo exceto void*. O resultado p+n é o ponteiro resultante da adição de n * sizeof(p) to the address of p. Da mesma forma, p-n é o ponteiro resultantes da subtração de n * sizeof(p) do endereço do p.
A 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 resulta 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 da 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 = p2 - p1;
System.Console.WriteLine("The difference is: {0}", difference);
}
}
// Output: The difference is: 6
Especificação da linguagem C#
Para obter mais informações, consulte C# Language Specification A especificação de linguagem é a fonte definitiva para a sintaxe e o uso de C#.
Consulte também
Referência
Unsafe Code and Pointers (C# Programming Guide)
Expressões de ponteiro (guia de programação de C#)
Manipulação de ponteiros (guia de programação de C#)
Tipos de ponteiro (guia de programação C#)
fixed Statement (C# Reference)