O que é um ponteiro?
Em todos os idiomas, um ponteiro é um tipo de variável que armazena um endereço de memória e você pode solicitar que eles digam o endereço para o qual estão apontando ou o valor no endereço para o qual estão apontando.
Um ponteiro pode ser pensado como uma espécie de marca de livro. Exceto que, em vez de ser usado para pular rapidamente para uma página de um livro, um ponteiro é usado para rastrear ou mapear blocos de memória.
Imagine a memória do seu programa precisamente como uma grande variedade de 65535 bytes.
Ponteiros apontam obedientemente
Os ponteiros lembram um endereço de memória cada e, portanto, apontam para um único endereço na memória.
Como um grupo, os ponteiros lembram e lembram endereços de memória, obedecendo a todos os seus comandos ad nauseum.
Você é o rei deles.
Ponteiros em c #
Especificamente em C #, um ponteiro é uma variável inteira que armazena um endereço de memória entre 0 e 65534.
Também específicos para C #, os ponteiros são do tipo int e, portanto, assinados.
Porém, você não pode usar endereços numerados negativamente, nem acessar um endereço acima de 65534. Qualquer tentativa de fazer isso lançará uma System.AccessViolationException.
Um ponteiro chamado MyPointer é declarado da seguinte forma:
int * MyPointer;
Um ponteiro em C # é um int, mas os endereços de memória em C # começam em 0 e se estendem até 65534.
Coisas pontudas devem ser manuseadas com cuidado especial
A palavra inseguro é a intenção de assustá-lo, e por uma razão muito boa: Os ponteiros são coisas pontiagudas e coisas pontiagudas por exemplo, espadas, machados, ponteiros, etc., devem ser manuseados com cuidado especial extra.
Os ponteiros dão ao programador controle rígido de um sistema. Portanto, é provável que os erros cometidos tenham conseqüências mais graves.
Para usar ponteiros, o código não seguro deve ser ativado nas propriedades do seu programa e os ponteiros devem ser usados exclusivamente em métodos ou blocos marcados como não seguros.
Exemplo de um bloco não seguro
unsafe
{
// Place code carefully and responsibly here.
}
Como usar ponteiros
Quando variáveis ou objetos são declarados ou instanciados, eles são armazenados na memória.
- Declare um ponteiro usando o prefixo do símbolo *.
int *MyPointer;
- Para obter o endereço de uma variável, use o prefixo do símbolo &.
MyPointer = &MyVariable;
Depois que um endereço é atribuído a um ponteiro, o seguinte se aplica:
- Sem prefixo * para se referir ao endereço de memória apontado como int.
MyPointer = &MyVariable; // Set MyPointer to point at MyVariable
- Com * prefixo para obter o valor armazenado no endereço de memória que está sendo apontado.
"MyPointer is pointing at " + *MyPointer;
Como um ponteiro é uma variável que contém um endereço de memória, esse endereço de memória pode ser armazenado em uma variável de ponteiro.
Exemplo de ponteiros sendo usados com cuidado e responsabilidade
public unsafe void PointerTest()
{
int x = 100; // Create a variable named x
int *MyPointer = &x; // Store the address of variable named x into the pointer named MyPointer
textBox1.Text = ((int)MyPointer).ToString(); // Displays the memory address stored in pointer named MyPointer
textBox2.Text = (*MyPointer).ToString(); // Displays the value of the variable named x via the pointer named MyPointer.
}
Observe que o tipo do ponteiro é um int. Isso ocorre porque o C # interpreta os endereços de memória como números inteiros (int).
Por que é int em vez de uint?
Não há uma boa razão.
Por que usar ponteiros?
Os ponteiros são muito divertidos. Com grande parte do computador sendo controlado pela memória, os ponteiros capacitam o programador a ter mais controle da memória do programa.
Monitoramento de memória.
Use ponteiros para ler blocos de memória e monitorar como os valores apontados mudam ao longo do tempo.
Altere esses valores de maneira responsável e acompanhe como suas alterações afetam seu computador.