Quizas ver primero: Hexadecimal Memoria RAM
# Pointers en C
Pass by value se refiere a que pasamos copias del valor de una variable, no la variable con el valor en si, por tanto, si pasamos esto a una funcion, no afectara realmente a nuestras variables fuera de esa funcion.
Los pointers nos permiten pasar las variables por referencia, esto es lo contrario a lo anterior y por tanto, si realizamos cambios a un pointer, haremos cambios en todo el programa.
Un pointer es una referencia a un espacio en memoria (una direccion), estos espacios pueden contener datos o estar vacios e incluso ser inexistentes.
Si un pointer no apunta a ningun espacio en memoria (inexistente o NULL) y es utilizado, causara Segmentation Fault en nuestro Software, esto es una buena señal, debido a que Segmentation Fault es una proteccion para no tocar memoria de programas que no deberiamos. Por eso es buena practica que, al definir punteros, los definamos como NULL.
Por tanto, entendamos que un Pointer esta compuesto (como cualquier variable en cualquier lenguaje) por dos partes:
- Valor. Guarda la direccion de memoria (Hexadecimal) del lugar al que esta apuntando.
- Tipo. Describe el data type del lugar al que esta apuntando, lo que va a encontrar.
Cabe aclarar que los arrays[] son pointers en si mismos, siempre son pasados por referencia a las funciones y por tanto, sus valores pueden cambiar aun fuera del scope de una funcion.
# Usar pointers en C
Para trabajar con pointers tenemos simbolos nuevos:
- &. Es utilizado antes de una variable ya definida y devuelve un puntero que apunta a su localizacion en memoria. Si se trata de un array, apuntara a la primera posicion en memoria de su primer elemento.
- *. Es utilizado en dos ocasiones, puede servirnos para definir un pointer o puede ser usado por un pointer para dereferenciarse y obtener el valor que esta guardado dentro de la memoria a la que esta apuntando.
- %p. Es utilizado dentro de la funcion ‘printf’ para imprimir la direccion de un puntero (su valor, a la que apunta).
| |
Siguiente: