¿Qué es un puntero?
En todos los idiomas, un puntero es un tipo de variable que almacena una dirección de memoria, y puede pedirles que le digan la dirección a la que apuntan o el valor de la dirección a la que apuntan.
Un puntero puede considerarse como una especie de marca de libro. Excepto que, en lugar de usarse para saltar rápidamente a una página de un libro, se usa un puntero para realizar un seguimiento o mapear bloques de memoria.
Imagine la memoria de su programa precisamente como una gran matriz de 65535 bytes.
Los punteros apuntan obedientemente
Los punteros recuerdan una dirección de memoria cada uno y, por lo tanto, cada uno apunta a una única dirección en la memoria.
Como grupo, los punteros recuerdan y recuerdan direcciones de memoria, obedeciendo cada comando hasta la saciedad.
Eres su rey
Punteros en C #
Específicamente en C #, un puntero es una variable entera que almacena una dirección de memoria entre 0 y 65534.
También específicos de C #, los punteros son de tipo int y, por lo tanto, están firmados.
Sin embargo, no puede usar direcciones numeradas negativamente, tampoco puede acceder a una dirección superior a 65534. Cualquier intento de hacerlo arrojará una excepción System.AccessViolationException.
Un puntero llamado MyPointer se declara así:
int * MyPointer;
Un puntero en C # es un int, pero las direcciones de memoria en C # comienzan en 0 y se extienden hasta 65534.
Las cosas puntiagudas deben manejarse con especial cuidado
La palabra inseguro tiene la intención de asustarlo, y por una muy buena razón: los punteros son cosas puntiagudas, y las cosas puntiagudas, por ejemplo, espadas, hachas, punteros, etc., deben manejarse con especial cuidado.
Los punteros le dan al programador un control estricto de un sistema. Por lo tanto, es probable que los errores cometidos tengan consecuencias más graves.
Para usar punteros, el código inseguro debe estar habilitado en las propiedades de su programa, y los punteros deben usarse exclusivamente en métodos o bloques marcados como inseguros.
Ejemplo de un bloque inseguro
unsafe
{
// Place code carefully and responsibly here.
}
Cómo usar punteros
Cuando las variables u objetos se declaran o instancian, se almacenan en la memoria.
- Declare un puntero utilizando el prefijo del símbolo *.
int *MyPointer;
- Para obtener la dirección de una variable, use el prefijo & símbolo.
MyPointer = &MyVariable;
Una vez que se asigna una dirección a un puntero, se aplica lo siguiente:
- Sin el prefijo * para referirse a la dirección de memoria que se señala como int.
MyPointer = &MyVariable; // Set MyPointer to point at MyVariable
- Con * prefijo para obtener el valor almacenado en la dirección de memoria a la que apunta.
"MyPointer is pointing at " + *MyPointer;
Como un puntero es una variable que contiene una dirección de memoria, esta dirección de memoria se puede almacenar en una variable de puntero.
Ejemplo de punteros utilizados con cuidado y responsabilidad
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 el tipo del puntero es un int. Esto se debe a que C # interpreta las direcciones de memoria como números enteros (int).
¿Por qué es int en lugar de uint?
No hay una buena razón.
¿Por qué usar punteros?
Los punteros son muy divertidos. Con gran parte de la computadora controlada por la memoria, los punteros le otorgan a un programador mayor control de la memoria de su programa.
Monitoreo de memoria.
Use punteros para leer bloques de memoria y monitorear cómo los valores apuntados cambian con el tiempo.
Cambie estos valores de manera responsable y realice un seguimiento de cómo afectan sus cambios a su computadora.