O conceito de apontador ou ponteiro é nada mais do que uma seta a “apontar” para outro local de memória.
Por outras palavras, podemos dizer que é um endereço de memória que contém uma seta a apontar para outro local em memória. Dando uma vista de olhos na imagem a cima, observamos que o endereço de memória 0100 é um ponteiro e está a apontar para o endereço 3000.
Nomeadamente na linguagem C um ponteiro deve ter um tipo primitivo ou não (caso seja definida alguma estrutura), nomeadamente inteiro, string, booleano etc.
Em C um ponteiro declara-se da seguinte forma:
int *ponteiro ;
Nunca esquecer que todo o ponteiro contem um asterisco antes do seu nome, pois é esse carácter (*) que o define.
#include <stdio.h>
int main()
{
int i = 2 ;
int *p=NULL ;
p = &i ;
*p = 20 ;
printf ("%dt%dt%pn", i, *p, p);
return 0;
}
Inicialmente é declarada uma variável estática i com o valor 2, e declaramos um ponteiro *p.
É muito importante referir que na declaração de um ponteiro é quase obrigatório atribuir-lhe o valor de NULL, pois ele poderá aceder a um pedaço de memória que não lhe pertence e pode causar problemas no nosso programa, ao que normalmente chamamos de “segmentation fault”.
Tendo isso então fazemos a atribuição p=&i , que em bom português se traduz pelo seguinte:
“Este apontador p que eu declarei vai conter o endereço da variável i, ou seja o p é uma seta para o i, se eu o alterar altero o valor de i“.
Pois bem, foi isso que fiz: *p=20
Atribui ao p o valor de 20, onde este p é o i, a tal seta. O que o ponteiro p irá fazer é colocar o valor 20 em i.
(Consequentemente o valor 2 que estava guardado em i foi perdido.)
Vendo então o output:
20 20 0012FF21
i
e de *p
serão iguais, já que p aponta para i. O terceiro valor é o endereço de memória onde está i (e, consequentemente, é o próprio valor de p).Pedro Tavares is a professional in the field of information security working as an Ethical Hacker/Pentester, Malware Researcher and also a Security Evangelist. He is also a founding member at CSIRT.UBI and Editor-in-Chief of the security computer blog seguranca-informatica.pt.
In recent years he has invested in the field of information security, exploring and analyzing a wide range of topics, such as pentesting (Kali Linux), malware, exploitation, hacking, IoT and security in Active Directory networks. He is also Freelance Writer (Infosec. Resources Institute and Cyber Defense Magazine) and developer of the 0xSI_f33d – a feed that compiles phishing and malware campaigns targeting Portuguese citizens.
Read more here.