Structures C et pointeurs
Structures C et pointeurs
Dans ce didacticiel, vous apprendrez à utiliser des pointeurs pour accéder aux membres des structures en programmation C. Vous apprendrez également à allouer dynamiquement de la mémoire de types struct.
Avant d'apprendre comment les pointeurs peuvent être utilisés avec des structures, assurez-vous de consulter ces tutoriels :
- Pointeurs C
- Structure C
Pointeurs C vers struct
Voici comment vous pouvez créer des pointeurs vers des structures.
struct name {
member1;
member2;
.
.
};
int main()
{
struct name *ptr, Harry;
}
Ici, ptr est un pointeur vers struct
.
Exemple :Accéder aux membres à l'aide de Pointer
Pour accéder aux membres d'une structure à l'aide de pointeurs, on utilise le ->
opérateur.
#include <stdio.h>
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:\n");
printf("Age: %d\n", personPtr->age);
printf("weight: %f", personPtr->weight);
return 0;
}
Dans cet exemple, l'adresse de person1 est stocké dans personPtr pointeur utilisant personPtr = &person1;
.
Maintenant, vous pouvez accéder aux membres de person1 en utilisant le personPtr
pointeur.
Au fait,
personPtr->age
est équivalent à(*personPtr).age
personPtr->weight
est équivalent à(*personPtr).weight
Allocation mémoire dynamique des structures
Avant de poursuivre cette section, nous vous recommandons de vérifier l'allocation de mémoire dynamique C.
Parfois, le nombre de variables de structure que vous avez déclarées peut être insuffisant. Vous devrez peut-être allouer de la mémoire pendant l'exécution. Voici comment vous pouvez y parvenir en programmation C.
Exemple :Allocation dynamique de mémoire de structures
#include <stdio.h>
#include <stdlib.h>
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 < n; ++i)
{
printf("Enter first name and age respectively: ");
// To access members of 1st struct person,
// ptr->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:\n");
for(i = 0; i < n; ++i)
printf("Name: %s\tAge: %d\n", (ptr+i)->name, (ptr+i)->age);
return 0;
}
Lorsque vous exécutez le programme, la sortie sera :
Enter the number of persons: 2 Enter first name and age respectively: Harry 24 Enter first name and age respectively: Gary 32 Displaying Information: Name: Harry Age: 24 Name: Gary Age: 32
Dans l'exemple ci-dessus, n nombre de variables de structure sont créées où n est saisi par l'utilisateur.
Pour allouer la mémoire pour n nombre de struct personne , nous avons utilisé,
ptr = (struct person*) malloc(n * sizeof(struct person));
Ensuite, nous avons utilisé le ptr pointeur pour accéder aux éléments de personne .
Langue C