Como cualquier otro tipo de dato en C, los punteros también deben ser declarados e inicializados. En esta lección, veremos cómo declarar e inicializar punteros en el lenguaje de programación C. Como ya sabemos, un puntero es una variable con capacidad para almacenar direcciones de memoria. Todos estos punteros no contendrán el valor final, sino la dirección de memoria a la que apuntan. Por tanto, necesitaremos crear una variable de tipo puntero al dato que deseemos apuntar.
La Naturaleza Tipificada de los Punteros
Pero, más allá de lo anterior (que un puntero es o almacena una dirección de memoria), al nivel de C, un “puntero” no es una dirección arbitraria sin más, sino que es una dirección que apunta a un double, o a un char, o a un int, etc. Adonde quiero llegar, los punteros en C tienen un tipo asociado, son punteros que apuntan a un tipo de variable concreto. Esto se refleja claramente en la declaración del puntero, donde el asterisco (*) pertenece al tipo (type), no al nombre, siendo así parte del tipo.
Declaración de Punteros a Tipos Básicos
Siguiendo esta lógica, la declaración de punteros se adapta al tipo de dato al que se desea apuntar. Por ejemplo, si deseamos crear una variable de tipo puntero a entero, necesitaremos escribir la siguiente línea de código. En caso de necesitar una variable de tipo puntero a float, entonces, la declaración sería muy similar a la anterior, pero cambiando el tipo. Y si deseamos apuntar a una variable de tipo character, parece que ya nos imaginamos cuál va a ser la línea de código resultante, adecuando el tipo a char.
Punteros y Cadenas de Caracteres
Las cadenas de caracteres en C son arrays de caracteres que terminan con el carácter cero (‘\0’), también llamado carácter fin de cadena o carácter nulo. Las principales diferencias al definir una cadena de caracteres usando comillas en vez de llaves para un array de caracteres, es que con comillas, no hace falta especificar el ‘\0’ final, ya que el carácter nulo está presente al final de la cadena de forma implícita. De hecho, como el tamaño del array está implícito, ni siquiera hace falta especificarlo en muchos casos.
Dado que los arrays son posiciones consecutivas de memoria que almacenan una secuencia de valores del mismo tipo, el array se maneja o referencia mediante el puntero a su primera posición. Esto es fundamental para entender cómo declarar y manipular punteros a cadenas de caracteres.
Lea también: IVA 21% Excel
Inicialización y Asignación de Punteros
La asignación de punteros es un proceso clave. El operador & (ampersand) sirve para obtener la dirección de memoria de una variable, es decir, nos devuelve su dirección de memoria, que es lo esperable tratándose de un puntero. En general, en una asignación, el elemento de la derecha se copia en el elemento de la izquierda.
Por último, en ocasiones es necesario o conveniente indicar que un puntero no apunta a nada, o no apunta a nada válido. Esto se maneja con el valor NULL, el cual es un caso especial en la inicialización (o literal). Un puntero devuelto como nulo es típico en una inicialización fallida. Cuando la memoria es reservada, el puntero apuntará al comienzo de la zona reservada.
Acceso a los Datos Apuntados
Una vez declarado e inicializado un puntero a una cadena de caracteres, es posible acceder a lo que está almacenado en esa dirección. Un puntero del tipo adecuado puede apuntar a cualquier posición intermedia del array (ej. puntero = &buffer[i]) e, incluso, mediante aritmética de punteros (ej. puntero = puntero+1), es posible recorrer el array y acceder a los valores de las diferentes posiciones (ej. *(puntero+1)). Cuando se trabaja con cadenas, se utiliza con formato "%s" para su impresión o manipulación, indicando que se espera un puntero a la dirección de inicio de la cadena.
Lea también: Guía IVA reducido
Lea también: ¿Cómo localizar tus XML del SAT?
