Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Industrial programming >> Lenguaje C

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);

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

  1. Dominando clases y métodos abstractos en C#: Guía práctica
  2. Entendiendo las reglas de alcance en C: Variables locales, globales y formales
  3. Dominando operadores bitwise en C: AND, OR, XOR, desplazamientos y complemento
  4. La guía definitiva de los mejores IDEs para C en Windows, macOS y Linux (2021)
  5. Manejo de excepciones en C++: Guía práctica con try, catch, throw
  6. Dominando funciones en C: Ejemplos prácticos de recursión y técnicas inline
  7. Dominando la gestión de memoria en C++: uso experto de new y delete
  8. Dominando Entrada y Salida en programación C
  9. Bucles for en C++ explicados: Sintaxis, flujo de trabajo y ejemplos prácticos
  10. Tutorial completo de C# en PDF – 243+ páginas de ejemplos para principiantes (Descarga hoy)
  11. Tipos de datos en C explicados: int, float, char y más – guía completa