Estruturas e indicadores C (com exemplos)

Neste tutorial, você aprenderá a usar ponteiros para acessar membros de structs em programação C. Você também aprenderá a alocar dinamicamente a memória dos tipos de estrutura.

Antes de aprender como os ponteiros podem ser usados ​​com structs, certifique-se de verificar estes tutoriais:

  • Ponteiros C
  • C struct

Ponteiros C para estruturar

Veja como você pode criar ponteiros para estruturas.

 struct name ( member1; member2;… ); int main() ( struct name *ptr, Harry; )

Aqui, ptr é um indicador para struct.

Exemplo: acessar membros usando o Pointer

Para acessar membros de uma estrutura usando ponteiros, usamos o ->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; )

Neste exemplo, o endereço de person1 é armazenado no ponteiro personPtr usando personPtr = &person1;.

Agora, você pode acessar os membros de person1 usando o personPtrponteiro.

A propósito,

  • personPtr->age é equivalente a (*personPtr).age
  • personPtr->weight é equivalente a (*personPtr).weight

Alocação de memória dinâmica 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 fazer isso na programação C.

Exemplo: alocação de memória dinâmica de estruturas

 #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; ) 

Quando você executa o programa, a saída será:

 Insira o número de pessoas: 2 Insira o nome e a idade respectivamente: Harry 24 Insira o nome e a idade respectivamente: Gary 32 Exibindo informações: Nome: Harry Idade: 24 Nome: Gary Idade: 32

No exemplo acima, um número n de variáveis ​​de estrutura é criado, onde n é inserido pelo usuário.

Para alocar a memória para n número de pessoa de estrutura, usamos,

 ptr = (struct person*) malloc(n * sizeof(struct person));

Em seguida, usamos o ponteiro ptr para acessar os elementos da pessoa.

Artigos interessantes...