English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Tutorial Básico de Lenguaje C

Control de Flujo de Lenguaje C

Funciones en C

Arreglos en C

Punteros en C

Cadenas en C

Estructuras de Lenguaje C

Archivos de Lenguaje C

C Otros

Manual de Referencia de C

Estructuras y punteros en C

En este tutorial, aprenderá a acceder a los miembros de estructuras usando punteros en el lenguaje de programación C. También aprenderá a asignar memoria dinámica para tipos de estructuras.

Antes de entender cómo usar punteros con estructuras, asegúrese de leer el siguiente tutorial:

Puntero a estructura en C

Esta es la manera de crear un puntero a estructura.

struct name {
    miembro1;
    miembro2;
    .
    .
};
int main()
{
    struct name *ptr, Harry;
}

Aquí, ptr es un puntero a struct.

Ejemplo: acceso a miembros usando puntero

Para acceder a los miembros de una estructura usando un puntero, utilizamos-operador.

#include <stdio.h>
struct person
{
   int age;
   float weight;
};
int main()
{
    struct person *personPtr, person1;
    personPtr = &person1;   
    printf("Ingrese edad: \t");
    scanf("%d", &personPtr->age);
    printf("Ingrese peso: \t");
    scanf("%f", &personPtr->peso);
    printf("Mostrar:\n");
    printf("Edad: \t%d\n", personPtr->age);
    printf("Peso: %f", personPtr)->peso);
    return 0;
}

Resultados de salida

Ingrese edad: 25
Ingrese peso: 55
Mostrar:
Edad: 25
Peso: 55.000000

En este ejemplo, usar personPtr =&person1;Asignar person1la dirección almacenada en el puntero personPtr.

Ahora, puede usar el puntero personPtr para acceder a person1miembros.

Por cierto,

  • personPtr->edad equivalente a (*personPtr).age

  • personPtr->peso equivalente a (*personPtr).weight

Asignación dinámica de memoria de estructuras

Antes de continuar con esta sección, se recomienda que reviseAsignación dinámica de memoria en C.

A veces, el número de variables de estructura que declara puede ser insuficiente. Puede necesitar asignar memoria en tiempo de ejecución. Este es el método que puede implementar este objetivo en programación en C.

Ejemplo: Asignación dinámica de memoria de estructuras

#include <stdio.h>
#include <stdlib.h>
struct person {
   int age;
   float weight;
   char name[30];
};
int main()
{
   struct person *ptr;
   int i, n;
   printf("Ingrese el número de personas: ");
   scanf("%d", &n);
   //Asignar memoria para n struct person
   ptr = (struct person*) malloc(n * sizeof(struct person));
   for(i = 0; i < n; ++i)
   {
       printf("Ingrese nombre y edad: ");
         //Para acceder a los miembros del primer struct person,
         //Se puede usar ptr->name y ptr->age
        //Para acceder a los miembros del segundo struct person,
        //usar (ptr + 1)->Nombre y (ptr + 1)-> age
       scanf("%s %d", (ptr+i)->name, &(ptr+i)->age);
   }
   printf("Mostrar información:\n");
   for(i = 0; i < n; ++i)
       printf("Nombre: %s	Edad: %d\n", (ptr+i)->name, (ptr+i)->age);
   return 0;
}

Al ejecutar el programa, la salida será:

Ingrese el número de personas:  2
Ingrese nombre y edad: Harry 24
Ingrese nombre y edad: Gary 32
Mostrar información:
Nombre: Harry	Edad: 24
Nombre: Gary	Edad: 32

En el ejemplo anterior, se crearon n variables struct en el lugar donde el usuario ingresa n.

Para asignar memoria para n struct person, usamos,

ptr = (struct person*) malloc(n * sizeof(struct person));

Luego, usamos el puntero ptr para acceder a los elementos de person.