2
respostas

Utilização dos ponteiros

Eu entendi a ideia dos ponteiros, mas não consigo imaginar uma situação prática em que ele seja necessário, teria como exemplificar?

2 respostas

Oi, Nicolas! Tudo bem?

Os ponteiros podem ser utilizados para gerenciar a memória, além de acessar e manipular dados de forma eficiente.

Dessa forma, para exemplificar o conceito, vamos supor que estamos buscando desenvolver um sistema de gerenciamento de estoque de uma loja, onde precisaremos armazenar informações sobre os produtos, como nome, quantidade em estoque e preço. Para isso, podemos criar uma estrutura em C para representar cada produto:

typedef struct {
    char nome[50];
    int quantidade;
    float preco;
} Produto;

Agora, supondo que buscamos criar uma função para aumentar a quantidade em estoque de um determinado produto, podemos utilizar um ponteiro para modificar diretamente o valor da quantidade, de acordo com o exemplo abaixo:

void aumentarEstoque(Produto* produto, int quantidade) {
    produto->quantidade += quantidade;
}

Nessa função, recebemos um ponteiro para um produto e a quantidade que queremos adicionar ao estoque. Utilizamos a seta -> para acessar o campo quantidade da estrutura apontada pelo ponteiro e incrementamos o valor.

Dessa forma, ao chamar a função aumentarEstoque, passando um ponteiro para o produto desejado, a quantidade em estoque será modificada diretamente.

Produto p;
strcpy(p.nome, "Camiseta");
p.quantidade = 10;
p.preco = 29.90;

aumentarEstoque(&p, 5);

printf("Nova quantidade em estoque: %d\n", p.quantidade);

No exemplo acima, criamos um produto com nome "Camiseta", quantidade inicial de 10 e preço de 29.90. Em seguida, chamamos a função aumentarEstoque, passando um ponteiro para o produto p e a quantidade desejada (5). Após a chamada da função, a quantidade em estoque será modificada para 15.

Podemos conferir, então, através do exemplo, que os ponteiros nos permitem modificar valores diretamente na memória, evitando cópias desnecessárias e melhorando a eficiência do programa.

Espero ter ajudado na visualização do conceito!

Um forte abraço e bons estudos!

Caso este post tenha te ajudado, por favor, marcar como solucionado ✓

Olá Grande Nicolas! tudo bem? espero que sim!

A utilização de ponteiros é INDISPENSÁVEL para a otimização do código, principalmente em C/C++, onde o foco é a performance.

Quando NÃO se utiliza ponteiros, vc passa uma cópia (Acho q vc já tá ligado nisso).

já quando se passa um ponteiro, vc passa o endereço de memória (pelo seu comentário, acho q vc também entendeu isso).

Mas aq vem a sacada: em códigos pequenos e simples como esses dos cursos, não há muito impacto, mas em um sistema real a coisa é diferente, onde muitas vezes vc tem que mexer com volumes absurdo de dados, principalmente em matrizes, vetores e objetos.

Veja a análise a seguir :

desvantagem de passar por COPIA (Sem ponteiro)

Parece inútil com pequenas variáveis assim, mas copiar grandes volumes de dados, por exemplo, Arrays, Matrizes e Objetos (classes), que no cenário de um sistema real ocupam, fácil fácil, mais de 8000 bytes na memória CADA um desses citados, isso deixa seu código extremamente pesado em questão de consumo de recursos, e claro, leva mais tempo para copiar grandes volumes de dados, logo o código se torna lento.

vantagem de usar REFERÊNCIA DE MEMÓRIA (usar ponteiro)

Quando se passa a referência de memória de um objeto ou variável, vc passa apenas o "local" onde ele está localizado na memória RAM, daí suas funções vão acessar aquele endereço para realizar as operações, NÃO realizando cópias.

Assim isso torna o código muito, mais MUITO, otimizado!

espero ter ajudado amigo! qualquer coisa estou a disposição! bons estudos!