Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Industrial programming >> Linguagem C

Dominando Structs e Ponteiros em C: Guia Prático

Dominando Structs e Ponteiros em C: Guia Prático

Descubra como usar ponteiros para acessar membros de structs e aprenda alocação dinâmica de memória para estruturas de dados flexíveis em C.

Antes de mergulhar em ponteiros com structs, familiarize-se com estes tópicos fundamentais:


Usando ponteiros para referenciar structs

Abaixo está um exemplo conciso que mostra como declarar uma struct e um ponteiro que a referencia.

struct Pessoa { int membro1; int membro2; /* membros adicionais */ }; int main(void) { struct Pessoa *ptr, harry; /* ptr pode agora apontar para qualquer instância Pessoa */ } 

Neste trecho, ptr é um ponteiro para uma instância struct Pessoa.


Exemplo: Acessando membros da struct através de um ponteiro

Para ler ou escrever campos de struct via ponteiro, use o operador ->.

#include <stdio.h> struct Pessoa { int idade; float peso; }; int main(void) { struct Pessoa *pessoaPtr, pessoa1; pessoaPtr = &pessoa1; /* aponta para pessoa1 */ printf("Digite a idade: "); scanf("%d", &pessoaPtr->idade); printf("Digite o peso: "); scanf("%f", &pessoaPtr->peso); printf("\nExibindo:\n"); printf("Idade: %d\n", pessoaPtr->idade); printf("Peso: %f", pessoaPtr->peso); return 0; } 

Aqui, pessoaPtr = &pessoa1; armazena o endereço de pessoa1 em pessoaPtr. O acesso subsequente via pessoaPtr->campo é equivalente a (*pessoaPtr).campo, oferecendo sintaxe concisa.


Alocação dinâmica de memória para structs

Quando o número de instâncias de struct necessárias não é conhecido em tempo de compilação, aloque memória em tempo de execução usando a biblioteca padrão C.

Exemplo: Alocando um array de structs

#include <stdio.h> #include <stdlib.h> struct Pessoa { int idade; float peso; char nome[30]; }; int main(void) { struct Pessoa *ptr; int i, n; printf("Digite o número de pessoas: "); scanf("%d", &n); ptr = (struct Pessoa*)malloc(n * sizeof(struct Pessoa)); if (!ptr) { fprintf(stderr, "Falha na alocação de memória\n"); return EXIT_FAILURE; } for (i = 0; i < n; ++i) { printf("Digite o primeiro nome e a idade respectivamente: "); scanf("%s %d", (ptr + i)->nome, &(ptr + i)->idade); } printf("\nExibindo informações:\n"); for (i = 0; i < n; ++i) { printf("Nome: %s\tIdade: %d\n", (ptr + i)->nome, (ptr + i)->idade); } free(ptr); return 0; } 

Executando o programa:

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

Este exemplo demonstra como criar n instâncias de struct Pessoa no heap, ler entrada do usuário para cada uma e exibir os resultados.

Linguagem C

  1. Entendendo Palavras-chave e Identificadores em C#: Regras, Listas e Boas Práticas
  2. Classes e Objetos em C#: Fundamentos para POO Robusta
  3. Dominando Classes e Métodos Abstratos em C#: Guia Prático
  4. Entendendo Classes e Métodos Parciais em C#
  5. Dominando Classes e Métodos Sealed em C#: Quando Usar, Exemplos Claros e Segurança de Código
  6. Entendendo Structs em C#: Definição, Uso e Diferenças-Chave
  7. Palavras-chave e Identificadores em C: Um Guia Prático
  8. Dominando Ponteiros em C: Um Tutorial Prático e Guiado por Especialistas
  9. Entendendo a Relação Entre Arrays e Ponteiros em C
  10. Programação C: Passando Endereços e Ponteiros para Funções – Guia Prático