Você está aqui: C ::: Dicas & Truques ::: Struct (Estruturas, Registros) |
Passando uma estrutura (struct) para uma função (com e sem o uso de ponteiros)Quantidade de visualizações: 15010 vezes |
Muitas vezes precisamos fornecer uma estrutura para uma função. Isso pode ser feito de várias formas, cada uma possuindo características particulares. No trecho de código abaixo nós temos uma função exibir_dados() que recebe uma estrutura e exibe os valores de seus membros. Veja: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- #include <stdio.h> #include <stdlib.h> #include <string.h> // define a estrutura Livro struct Livro{ char *titulo; int codigo; int paginas; }; // método que exibe os dados da estrutura Livro void exibir_dados(struct Livro livro){ // exibe os dados do livro printf("Titulo: %s\nCodigo: %d\nPaginas: %d\n", livro.titulo, livro.codigo, livro.paginas);...... Este código, embora funcional, possui duas desvantagens. A primeira é que a estrutura inteira está sendo passada para a função, e isso pode prejudicar o desempenho do programa, devido ao uso desnecessário de recursos. A segunda é que qualquer modificação que fizermos, dentro da função, nos valores dos membros da estrutura não terão qualquer efeito na estrutura original. E isso é compreensível, visto que estamos passando uma cópia da estrutura. Qual a solução? Uso de ponteiros. Veja uma nova versão do código: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- #include <stdlib.h> #include <string.h> // define a estrutura Livro struct Livro{ char *titulo; int codigo; int paginas; }; // método que exibe os dados da estrutura Livro void exibir_dados(struct Livro *livro){ // exibe os dados do livro printf("Titulo: %s\nCodigo: %d\nPaginas: %d\n", livro->titulo, livro->codigo, livro->paginas);...... Agora sim. Em vez de passarmos uma cópia da estrutura nós estamos passando apenas seu endereço de memória para a função que exibe os dados. E o melhor, se qualquer alteração nos valores do membros da estrutura for efetuada dentro da função, o resultado será imediatamente visto na estrutura original. Mas, existe uma forma de passar o endereço da estrutura mas evitar que os valores de seus membros sejam alterados dentro da função? Claro que sim! Basta usarmos o modificador const na assinatura da função (antes do nome da variável ponteiro). Veja: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- // método que exibe os dados da estrutura Livro void exibir_dados(struct Livro const *livro){ // exibe os dados do livro...... Se tentarmos alterar o valor de alguns dos membros da estrutura dentro da função teremos uma mensagem de erro de compilação. No Dev-C++ (usando MingW) esta mensagem é: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- assignment of data-member `Livro::titulo` in ...... Lembre-se que aqui nós temos um PONTEIRO PARA UMA CONSTANTE: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- Livro const *livro...... Isso quer dizer que o ponteiro pode apontar para outro local mas o objeto para o qual ele aponta no momento não poderá sofrer modificações. |
![]() |
Desafios, Exercícios e Algoritmos Resolvidos de C |
Veja mais Dicas e truques de C |
Dicas e truques de outras linguagens |
E-Books em PDF |
||||
|
||||
|
||||
Linguagens Mais Populares |
||||
1º lugar: Java |