Los punteros también son variables y juegan un papel muy importante en el lenguaje de programación C. Se usan para diferentes cuestiones, tales como::
Entre otras
Un puntero es esencialmente una variable entera simple que contiene una dirección de memoria que apunta a un valor, en lugar de contener el valor real en sí.
La memoria de la computadora es un almacén secuencial de datos, y un puntero apunta a una parte específica de la memoria. Nuestro programa puede usar punteros de tal manera que los punteros apuntan a una gran cantidad de memoria, dependiendo de cuánto decidamos leer a partir de ese momento.
Ya hemos presentado las cadenas anteriormente, pero ahora podemos profundizar un poco más y comprender qué son las cadenas en C realmente
La siguiente línea:
char * nombre = "John";
hace tres cosas:
nombre
, que es un puntero a un caracter.nombre
de forma que apunte a la zona de memoria donde se encuentra el caracter J
(al cual sigue el resto de la cadena en la memoria). Si tratamos de acceder a la variable nombre
como una matriz, funcionará y devolverá el valor ordinal del carácter J, ya que la variable nombre
en realidad apunta exactamente al comienzo de la cadena.
Como sabemos que la memoria es secuencial, podemos suponer que si avanzamos en la memoria al siguiente caracter, recibiremos la siguiente letra de la cadena, hasta que lleguemos al final de la cadena, marcada con un terminador nulo (el carácter cuyo valor ordinal es 0, anotado como \0
).
Desreferenciar la operación de referirse a donde señala el puntero, en lugar de la dirección de memoria. Ya estamos usando la desreferenciación en vectores. El operador corchete - [0]
-por ejemplo, accede al primer elemento del vector. Y dado que los vectores son en realidad punteros, acceder al primer elemento del vector es lo mismo que desreferenciar un puntero. La desreferenciación de un puntero se realiza utilizando el operador asterisco *
.
Si queremos crear un array que apunte a una variable diferente en nuestra pila, podemos escribir el siguiente código:
/* define una variable local a */ int a = 1; /* define una variable puntero, y apunta a la variable a utilizando el operador & */ int * pointer_to_a = &a; printf("The value a is %d\n", a); printf("The value of a is also %d\n", *pointer_to_a);
Utilizamos el operador &
para apuntar a la variable a
, que acabamos de crear.
Después, nos referimos a él utilizando el operador de desreferencia (o indirección). También podemos cambiar el contenido de la variable desreferenciada:
int a = 1; int * pointer_to_a = &a; /* Modificamos la variable a */ a += 1; /* Modificamos la variable a de nuevo */ *pointer_to_a += 1; /* Imprimiremos el valor 3 */ printf("The value of a is now %d\n", a);
Cree un puntero a la variable local n
llamada pointer_to_n
, y úselo para aumentar el valor de n
en uno.