En este tutorial, aprenderá a usar punteros para acceder a miembros de estructuras en programación en C. También aprenderá a asignar dinámicamente memoria de tipos de estructuras.
Antes de aprender cómo se pueden usar los punteros con estructuras, asegúrese de consultar estos tutoriales:
- Punteros C
- Estructura C
C Punteros para estructurar
A continuación, le mostramos cómo puede crear punteros a estructuras.
struct name ( member1; member2;… ); int main() ( struct name *ptr, Harry; )
Aquí, ptr es un puntero a struct
.
Ejemplo: miembros de acceso mediante puntero
Para acceder a los miembros de una estructura usando punteros, usamos el ->
operador.
#include struct person ( int age; float weight; ); int main() ( struct person *personPtr, person1; personPtr = &person1; printf("Enter age: "); scanf("%d", &personPtr->age); printf("Enter weight: "); scanf("%f", &personPtr->weight); printf("Displaying:"); printf("Age: %d", personPtr->age); printf("weight: %f", personPtr->weight); return 0; )
En este ejemplo, la dirección de person1 se almacena en el puntero personPtr usando personPtr = &person1;
.
Ahora, puede acceder a los miembros de person1 usando el personPtr
puntero.
Por cierto,
personPtr->age
es equivalente a(*personPtr).age
personPtr->weight
es equivalente a(*personPtr).weight
Asignación de memoria dinámica de estructuras
Antes de continuar con esta sección, le recomendamos que compruebe la asignación de memoria dinámica de C.
A veces, la cantidad de variables de estructura que declaró puede ser insuficiente. Es posible que deba asignar memoria durante el tiempo de ejecución. Así es como puede lograr esto en la programación C.
Ejemplo: asignación de memoria dinámica de estructuras
#include #include struct person ( int age; float weight; char name(30); ); int main() ( struct person *ptr; int i, n; printf("Enter the number of persons: "); scanf("%d", &n); // allocating memory for n numbers of struct person ptr = (struct person*) malloc(n * sizeof(struct person)); for(i = 0; i name and ptr->age is used // To access members of 2nd struct person, // (ptr+1)->name and (ptr+1)->age is used scanf("%s %d", (ptr+i)->name, &(ptr+i)->age); ) printf("Displaying Information:"); for(i = 0; i name, (ptr+i)->age); return 0; )
Cuando ejecute el programa, la salida será:
Ingrese el número de personas: 2 Ingrese el nombre y la edad respectivamente: Harry 24 Ingrese el nombre y la edad respectivamente: Gary 32 Información en pantalla: Nombre: Harry Edad: 24 Nombre: Gary Edad: 32
En el ejemplo anterior, se crean n números de variables de estructura donde el usuario ingresa n.
Para asignar la memoria para n número de personas de estructura, usamos,
ptr = (struct person*) malloc(n * sizeof(struct person));
Luego, usamos el puntero ptr para acceder a elementos de person.