Dominio de punteros a caracteres y funciones en C
¿Qué es un puntero a carácter en C?
Un puntero a carácter almacena la dirección de una variable de tipo char o la dirección del primer carácter de un array de caracteres (cadena). Son muy útiles para manipular cadenas, ya que en C no existe un tipo de dato «string» nativo: un array de char terminado en nulo (\0) se considera una cadena. Un puntero a char puede pasarse como argumento a una función para procesar la cadena.
Declaración de un puntero a carácter
Sintaxis:
char *nombre_puntero;
Inicialización
Puntero a una variable char
char *ptr = &variable_char;
Puntero a un array de caracteres (cadena)
char *ptr = array_char; // nombre del array = dirección del primer elemento // o equivalentemente char *ptr = &array_char[0];
Ejemplo básico
#include <stdio.h>
int main() {
char x = 'P';
char arr[] = "TutorialesPunto";
char *ptr_x = &x;
char *ptr_arr = arr;
printf("Valor de x: %c\n", *ptr_x);
printf("Valor de arr: %s\n", ptr_arr);
return 0;
}
Salida
Valor de x: P Valor de arr: TutorialesPunto
Comprendiendo el puntero a cadena
Una cadena es un array terminado en nulo:
char arr[] = "Hola"; // último elemento es '\0'
Declarar puntero al primer carácter:
char *ptr = &arr[0]; // o simplemente char *ptr = arr;
Incluso puede declararse directamente:
char *ptr = "Hola"; // literal almacenado en memoria de solo lectura
Recorrido incrementando el puntero:
while (*ptr != '\0') {
printf("%c", *ptr);
ptr++;
}
Acceso a array de caracteres
Para imprimir la cadena completa: printf("%s", ptr);. Para acceder carácter a carácter: printf("%c", *ptr); ptr++;.
Funciones de la biblioteca string.h que usan punteros a char
strlen() – Longitud de cadena
Prototipo: int strlen(char *);
#include <stdio.h>
#include <string.h>
int main() {
char *ptr = "Hola";
printf("Cadena: %s\n", ptr);
printf("Longitud: %d\n", strlen(ptr));
return 0;
}
Salida: Longitud: 4.
Implementación manual equivalente:
int mi_strlen(char *ptr) {
int i = 0;
while (*ptr != '\0') { i++; ptr++; }
return i;
}
strcpy() – Copia de cadena
El operador = no copia cadenas; se usa strcpy(destino, origen).
char *ptr = "¿Cómo estás?";
char *ptr1;
strcpy(ptr1, ptr); // requiere que ptr1 apunte a memoria válida y suficiente
printf("%s", ptr1);
Lógica interna: copiar cada carácter hasta \0 y añadir \0 al final.
strcmp() – Comparación de cadenas
Prototipo: int strcmp(char *s1, char *s2);
- Retorna
0si son idénticas. - Retorna >0 si el primer carácter diferente en
s1tiene mayor valor ASCII (s1 va después en orden alfabético). - Retorna <0 si es menor (s1 va antes).
char *s1 = "BASK"; char *s2 = "BALL"; int ret = strcmp(s1, s2); // ret > 0 porque 'K' > 'L'? Wait: 'K' (75) < 'L' (76) so ret < 0. Actually example says first string appears after second. Let's check: "BASK" vs "BALL": compare third char 'S' (83) vs 'L' (76) -> 'S' > 'L', so ret > 0. Yes.
Implementación manual:
int mi_strcmp(char *s1, char *s2) {
while (*s1 != '\0' && *s2 != '\0') {
if (*s1 != *s2) return *s1 - *s2;
s1++; s2++;
}
return 0;
}
Lenguaje C
- Dominando clases y métodos abstractos en C#: Guía práctica
- Entendiendo las reglas de alcance en C: Variables locales, globales y formales
- Dominando operadores bitwise en C: AND, OR, XOR, desplazamientos y complemento
- La guía definitiva de los mejores IDEs para C en Windows, macOS y Linux (2021)
- Manejo de excepciones en C++: Guía práctica con try, catch, throw
- Dominando funciones en C: Ejemplos prácticos de recursión y técnicas inline
- Dominando la gestión de memoria en C++: uso experto de new y delete
- Dominando Entrada y Salida en programación C
- Bucles for en C++ explicados: Sintaxis, flujo de trabajo y ejemplos prácticos
- Tutorial completo de C# en PDF – 243+ páginas de ejemplos para principiantes (Descarga hoy)
- Tipos de datos en C explicados: int, float, char y más – guía completa