Thihup
(usa Manjaro Linux)
Enviado em 23/10/2015 - 22:26h
Gabrielz escreveu:
Certamente quando penso em C, penso em ponteiros! Muitos projetos em C utilizam ponteiros, GTK+, Qt, tudo que os senhores imaginarem.
Infelizmente, só sei usar ponteiros pra passagem por referência :(. Será que os senhores poderiam me ensinar técnicas avançadas usando ponteiros? Técnicas que podem "lascar" a memória RAM? Técnicas pra mexer no endereço de memória do kernel e alterar valores?
Olá amigo :D
Bom, se vc tentar acessar algum endereço de memória que algum outro programa esteja utilizando, ou o kernel, por exemplo, irá dar Falha de segmentação.
Um exemplo:
#include <stdio.h>
int main(int argc, char *argv[]){
int *vaco;
vaco = 5; // Posicao do ponteiro bem no inicio da RAM !! ERRRO!
//vaco = (int *)5; O 'correto' para nao dar warnings...
*vaco = 10;
printf("Vaco %d %p\n",*vaco,vaco);
return 0;
}
Direto do Wikipédia:
[...] Na maioria das arquiteturas, um ponteiro é grande o suficiente para indexar todas as unidades de memória presentes no sistema. Isso torna possível a um programa tentar acessar um endereço que corresponde a uma área inválida ou desautorizada da memória, o que é chamado de falha de segmentação. Por outro lado, alguns sistemas possuem mais unidades de memória que endereços. Nesse caso, é utilizado um esquema mais complexo para acessar diferentes regiões da memória, como o de segmentação ou paginação. [...]
Agora algumas utilidades dos ponteiros:
* Permite passagem por referência (passa o endereço dos dados ao invés de uma cópia dos mesmos), muito utilizado na passagem e retorno de valores de funções
* Alocação dinâmica de memória (talvez o mais importante);
* Strings (relacionado com o item anterior);
* Criação de estruturas de dados como listas encadeadas e árvores;
* Em programação de mais baixo nível, como em drivers, sem ponteiros você não sai do lugar.
Entre outros...
Esse livro tem 500 páginas dedicadas apenas a ponteiros, dada sua importância:
http://www.amazon.com/Understanding-Pointers-C-Yashavant-Kanetkar/dp/8176563587
Leitura bem interessante, por sinal.
E se quiser algumas informações, o site do Wikipédia é completinho até:
https://pt.wikipedia.org/wiki/Ponteiro_%28programa%C3%A7%C3%A3o%29
Espero ter ajudado
Se ajudei, marque o tópico como resolvido e clique em melhor resposta!
[]'s
T+
--
body@human: $ sudo su
brain@human: # apt-get purge -y windows* && echo "Windows removed successfully"