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