Na linguagem C, não temos “objetos” no sentido de orientação a objetos como em C++ ou Java, mas podemos usar estruturas (structs) para criar entidades com atributos e manipular seus dados por meio de ponteiros. Ponteiros para structs são fundamentais para desenvolver programas organizados e eficientes, pois permitem que dados complexos sejam passados por referência, economizando memória e melhorando a performance. Neste post entenda ponteiros para objetos em C.
Definindo uma Struct
Vamos criar uma struct para representar um objeto simples, como um Pessoa:
#include <stdio.h>
#include <string.h>
struct Pessoa {
char nome[50];
int idade;
};
Usando ponteiros para Structs
Com a struct criada, podemos declarar um ponteiro para ela e manipular os dados do objeto usando a notação de ponteiro (->
).
Exemplo:
void exibirPessoa(struct Pessoa *p) {
printf("Nome: %s\n", p->nome);
printf("Idade: %d\n", p->idade);
}
int main() {
struct Pessoa pessoa1;
strcpy(pessoa1.nome, "Ana");
pessoa1.idade = 25;
exibirPessoa(&pessoa1); // Passa o endereço da struct
return 0;
}
Explicação do código
- Definindo um ponteiro:
struct Pessoa *p
é um ponteiro que armazena o endereço de uma variável do tipoPessoa
. - Acessando os membros com
->
: O operador->
permite acessar os campos da struct através do ponteiro, facilitando o uso e mantendo o código limpo. - Passagem por referência: Em
exibirPessoa(&pessoa1)
, passamos o endereço dapessoa1
para a função, evitando a cópia da estrutura completa.
Vantagens de usar ponteiros para Structs
- Economia de memória: Passar apenas o endereço é mais econômico do que duplicar estruturas grandes.
- Flexibilidade e modificações: Podemos alterar o conteúdo do objeto diretamente dentro da função, o que é prático para gerenciar estruturas de dados complexas.
Outro exemplo prático
Um ponteiro é uma simples implementação do tipo referência da Ciência da computação.
Assim como é possível criar ponteiros para variáveis do tipo char, int ou float, também é possível criarmos ponteiros para objetos.
O código abaixo ilustra bem o uso desse conceito:
int nInt;
//ponteiro do tipo int - é inicializado para apontar ao inteiro nInt
int* pInt = &nInt;
class Savings {
public:
int nAccountNumber;
double dBalance;
};
Saving s;
//declara ponteiro ao objeto Savings e o inicializa para o endereço de s
Saving* pS = &s;
/* O tipo pS é "ponteiro para Savings", o qual é escrito como Savings* */
...
// designa valores ao número de conta e saldo do objeto Savings indicado por pS
(*pS) .nAccountNumber = 2100;
(*pS) .dBalance = 2350;
/* Os parênteses são necessários devido à precedência de . ser maior que *.
Sem os parênteses, *pS.nAccountNumber = 2100 seria interpretado como
*(pS.nAccountNumber) = 2100, o que significa "armazenar 2100 no lugar apontado por
pS.nAccountNumber". Isso gera um erro de compilador, pois nAccountNumber não é um
ponteiro (nem pS um Savings). */
/* (*pS). dBalance = 2350 também pode ser escrito na forma "pS->dBalance = 2350".
//Chama uma função com um ponteiro de objeto:
double withdraw(double dAmount);
double deposit(double dAmount);
//argumento para someOtherFunction() é "ponteiro para Savings"
void someOtherFunction(Savings s) {
s.deposit(140.0);
}
void someFunction() {
Savings s = {2100, 0.0};
someOtherFunction(s); //passagem do objeto à função
//Para passar o endereço do objeto ao invés do próprio objeto:
...
void someOtherFunction(Savings* pS) {
pS->deposit(140.0);
}
void someFunction() {
Savings s = {2500, 0.0};
someOtherFunction(&s); //passagem do endereço do objeto à funçao
}
Ponteiros para structs em C são uma técnica poderosa para trabalhar com dados organizados em objetos.
Dominar essa prática é essencial para criar programas robustos e eficientes em C, especialmente em projetos que manipulam grande volume de dados.
Aprenda através de projetos reais e aulas práticas. São 20 cursos completos + cursos bônus. Grupos privados exclusivos, atualizações constantes e lives semanais.
Python, PHP, Java Script, CSS, Node, Angular JS, MySQL, Photoshop, Flutter, AWS, Apache e muito mais!
CLIQUE NA IMAGEM ABAIXO E CONFIRA MAIS DETALHES:
Dúvidas ou sugestões? Deixem nos comentários! Para mais dicas, acesse o nosso canal no YouTube:
https://youtube.com/criandobits
Quer receber GRÁTIS o e-book "Como Formatar um Computador em 5 Minutos"?
Sobre o Autor
0 Comentários