Estructuras y punteros de C (con ejemplos)

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 personPtrpuntero.

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.

Articulos interesantes...