Estruturas e ponteiros C
Estruturas C e ponteiros
Neste tutorial, você aprenderá a usar ponteiros para acessar membros de structs na programação C. Você também aprenderá a alocar memória dinamicamente de tipos de estrutura.
Antes de aprender sobre como ponteiros podem ser usados com structs, certifique-se de verificar estes tutoriais:
- Ponteiros C
- Estrutura C
Ponteiros C para struct
Veja como você pode criar ponteiros para structs.
struct name {
member1;
member2;
.
.
};
int main()
{
struct name *ptr, Harry;
}
Aqui, ptr é um ponteiro para
struct
. Exemplo:acessar membros usando o ponteiro
Para acessar membros de uma estrutura usando ponteiros, usamos o
->
operador.
#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;
}
Neste exemplo, o endereço de person1 é armazenado no personPtr ponteiro usando
personPtr = &person1;
. Agora, você pode acessar os membros de person1 usando o
personPtr
ponteiro. A propósito,
personPtr->age
é equivalente a(*personPtr).age
personPtr->weight
é equivalente a(*personPtr).weight
Alocação dinâmica de memória de estruturas
Antes de prosseguir nesta seção, recomendamos que você verifique a alocação de memória dinâmica C.
Às vezes, o número de variáveis de estrutura que você declarou pode ser insuficiente. Você pode precisar alocar memória durante o tempo de execução. Veja como você pode conseguir isso na programação C.
Exemplo:alocação dinâmica de memória de estruturas
#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;
}
Ao executar o programa, a saída será:
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
No exemplo acima, n número de variáveis de estrutura são criadas onde n é inserido pelo usuário.
Para alocar a memória para n número de pessoa da estrutura , nós costumavamos,
ptr = (struct person*) malloc(n * sizeof(struct person));
Em seguida, usamos o ptr ponteiro para acessar elementos de person .
Linguagem C