Ponteiros são, sem sobra de dúvidas, um dos mais importantes conceitos da linguagem C. E igualmente importante é entender bem seus conceitos teóricos.
Afinal, a linguagem tem como uma de suas principais características a manipulação da memória de hardware, sendo utilizada amplamente em sistemas embarcados e aplicações de baixo nível.
Qual a motivação? Que problemas os ponteiros se encarregam de resolver/mitigar?
Você pode alterar os valores de uma variável sem ter a necessidade de criar cópias, ou passar esses argumentos na função.
Ao invés disso, é passado um endereço de memória, e a alteração é feita diretamente na variável, sem a necessidade de passagem por cópia.
Em projetos complexos a economia de recursos de hardware é significativa, podendo impactar em premissas do projeto.
Indo adiante, vamos ilustrar um problema prático para mostrar por que vale a pena dominar os ponteiros:
Imagine que você é um desenvolvedor e precisa criar um software para modelar as peças e veículos de uma indústria automotiva. Esses arquivos podem ter vários gigabytes e conter inúmeros objetos e camadas.
Agora pense: se toda vez que um engenheiro fosse acessar ou editar uma peça o sistema precisasse recriar todo o arquivo na memória, ela se esgotaria rapidamente.
Os ponteiros resolvem esse problema. Em vez de criar uma cópia temporária na RAM, o software apenas passa o endereço de memória da peça que será editada, economizando espaço e tornando o processo muito mais eficiente
Portanto, aprender ponteiros é talvez o maior desafio da jornada e irá preparar o jovem bolseiro pros desafios que virão com as Estruturas de Dados.
Quando criar um ponteiro? Como passar como referência? Como des(referenciar) e acessar o conteúdo para onde ele aponta? Como manipular os endereços de memória?
Pensando dessa forma, resolvi escrever um pouco pois é uma boa forma de "dumpar" o conteúdo visto e também me força a tentar ensinar ou reforçar conceitos à você que está lendo. Espero que consiga ajudar a você, e ao Lucas do futuro, nessa jornada!
Ponteiros, basicamente, são tipos de variáveis que armazenam endereços de outras variáveis. A sua declaração é simples:
int *ptr; //declarando um ponteiro para o tipo inteiro, ou seja, serão reservados 4 bytes de memória.
int valor = 20;
ptr = &valor;
printf("%d", *ptr);
O que aconteceu nesse trecho de código, foi:

Ou seja, repare que um ponteiro recebe apenas endereços de memória.
O acesso ao conteúdo propriamente dito do endereço armazenado é feito através do desreferenciamento do ponteiro, denotado por "*".
ptr = &[aqui vai um endereço de memória de uma variável]
*ptr = [aqui será alterado o conteúdo dentro da variável apontada].
Ficou claro? (se não, comenta aí!)
E o que acontece, se eu fizer uma alteração no valor da variável apontada?
Simples: o valor será alterado dentro da variável. Afinal, se eu sou um "ponteiro" e sei o endereço de uma variável, posso ler ou alterar seu conteúdo.
Ponteiros são extremamente poderosos. Essa foi uma rápida introdução ao assunto, vou deixar aqui abaixo alguns links de referência caso seja do seu interesse, ou do seu professor, que você aprenda. =]
https://www.youtube.com/watch?v=2ybLD6_2gKM&pp=ygUIcG9pbnRlcnM%3D

Top comments (0)