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

Dominando structs y punteros en C: Guía práctica

Dominando structs y punteros en C: Guía práctica

Descubra cómo aprovechar punteros para navegar miembros de structs, y aprenda asignación dinámica de memoria para estructuras de datos flexibles en C.

Antes de sumergirse en punteros con structs, familiarícese con estos temas fundamentales:


Uso de punteros para referenciar structs

A continuación se muestra un ejemplo conciso que muestra cómo declarar un struct y un puntero que lo referencia.

struct Person {
    int member1;
    int member2;
    /* miembros adicionales */
};
int main(void) {
    struct Person *ptr, harry;
    /* ptr ahora puede apuntar a cualquier instancia Person */
}

En este fragmento, ptr es un puntero a una instancia de struct Person.


Ejemplo: Acceso a miembros de struct a través de un puntero

Para leer o escribir campos de struct mediante un puntero, use el operador ->.

#include <stdio.h>
struct Person {
    int age;
    float weight;
};
int main(void) {
    struct Person *personPtr, person1;
    personPtr = &person1; /* apuntar a person1 */
    printf("Introduzca edad: ");
    scanf("%d", &personPtr->age);
    printf("Introduzca peso: ");
    scanf("%f", &personPtr->weight);
    printf("\nMostrando:\n");
    printf("Edad: %d\n", personPtr->age);
    printf("Peso: %f", personPtr->weight);
    return 0;
}

Aquí, personPtr = &person1; almacena la dirección de person1 en personPtr. El acceso subsiguiente vía personPtr->campo es equivalente a (*personPtr).campo, ofreciendo sintaxis concisa.


Asignación dinámica de memoria para structs

Cuando el número de instancias de struct requerido no se conoce en tiempo de compilación, asigne memoria en tiempo de ejecución usando la biblioteca estándar de C.

Ejemplo: Asignar un array de structs

#include <stdio.h>
#include <stdlib.h>
struct Person {
    int age;
    float weight;
    char name[30];
};
int main(void) {
    struct Person *ptr;
    int i, n;
    printf("Introduzca el número de personas: ");
    scanf("%d", &n);
    ptr = (struct Person*)malloc(n * sizeof(struct Person));
    if (!ptr) {
        fprintf(stderr, "Falló la asignación de memoria\n");
        return EXIT_FAILURE;
    }
    for (i = 0; i < n; ++i) {
        printf("Introduzca nombre y edad respectivamente: ");
        scanf("%s %d", (ptr + i)->name, &(ptr + i)->age);
    }
    printf("\nMostrando información:\n");
    for (i = 0; i < n; ++i) {
        printf("Nombre: %s\tEdad: %d\n", (ptr + i)->name, (ptr + i)->age);
    }
    free(ptr);
    return 0;
}

Ejecutar el programa produce:

Introduzca el número de personas: 2
Introduzca nombre y edad respectivamente: Harry 24
Introduzca nombre y edad respectivamente: Gary 32
Mostrando información:
Nombre: Harry Edad: 24
Nombre: Gary Edad: 32

Este ejemplo demuestra cómo crear n instancias de struct Person en el heap, leer entrada del usuario en cada una y luego mostrar los resultados.

Lenguaje C

  1. Entendiendo palabras clave e identificadores en C#: Reglas, listas y mejores prácticas
  2. Clases y objetos en C#: Fundamentos para POO robusta
  3. Dominando clases y métodos abstractos en C#: Guía práctica
  4. Entendiendo clases y métodos parciales en C#
  5. Dominando clases y métodos sealed en C#: Cuándo usarlos, ejemplos claros y mejora de seguridad y rendimiento
  6. Entendiendo los Structs en C#: Definición, Uso y Diferencias Clave
  7. Palabras clave e identificadores en C: guía práctica
  8. Dominando punteros en C: Tutorial práctico guiado por expertos
  9. Entendiendo la relación entre arrays y punteros en C
  10. Programación en C: Pasar direcciones y punteros a funciones – Guía práctica
  11. Dominando structs en C: Definición, variables, acceso y ejemplos avanzados