Programação C - Ponteiros



 

        Conceito de “Ponteiro”. Toda variável quando é declarada, é reservado um espaço na memória para esta variável e seu tamanho depende do tipo, capacidade de memória e bits do computador. Deste modo uma variável do tipo “Inteira” pode ocupar de dois a oito bytes. Lembrando que os espaços de memória possuem endereço em hexadecimal, ao ocupar um espaço de memória uma variável passa a ter também um endereço de memória.

        Quando falamos que vamos trabalhar com “Ponteiros”, na verdade vamos trabalhar com o endereço de memória de variáveis. O fato da linguagem permitir trabalhar com o nome da variável declarada, é que fica mais fácil trabalhar com o nome do que com o endereço. Vejamos o algoritmo exemplo.

 

 

* ATENÇÃO, estes valores de memória podem ser outros em outros computadores e com mais variáveis.

 

 

Analisando o resultado dos printf:

A saída será: Comentários
py – px = -3 px e py são variáveis que contem endereços de memória. Deste modo a diferença entre elas é a diferença entre os respectivos endereços em bytes.
px = 16055960     *px = 5     &px = 16055936 px vai apresentar o endereço de memória que ele tem armazenado (no caso da variável x).
*px (com o asterisco a frente) vai apresentar o conteúdo do endereço que ele tem armazenado
&px (com o & a frente) vai apresentar o endereço de memória da própria variável px.
py = 16055948     *py = 7     &py = 16055924 py vai apresentar o endereço de memória que ele tem armazenado (no caso da variável y).
*py (com o asterisco a frente) vai apresentar o conteúdo do endereço que ele tem armazenado
&py (com o & a frente) vai apresentar o endereço de memória da própria variável py.
px++ px++ , este comando fez com que o conteúdo de px, que é um endereço de memória, seja incrementado de uma unidade. Neste caso vai apontar para um endereço desconhecido qualquer.
px = 16055964     *px = -858993460     &px = 16055936 px vai apresentar o endereço de memória que ele tem armazenado (da variável y).
*px (com o asterisco a frente) vai apresentar o conteúdo do endereço que ele tem armazenado
&px (com o & a frente) vai apresentar o endereço de memória da própria variável px.
py = px + 3; Este comando faz com que a variável py receba o endereço que a variável px contem acrescido de 3 unidades (endereços). Como a linguagem é dinâmica, ela permite este fato, mesmo não tendo sido declarado nada neste endereço que py acabou de receber.
py = 16055976     *py = 1908942     &y = 16055924 py vai apresentar o endereço de memória que ele tem armazenado (não corresponde a nenhuma variável).
*py (com o asterisco a frente) vai apresentar o conteúdo do endereço que ele tem armazenado. Como não foi declarada nenhuma variável para este endereço, o resultado pode ser qualquer coisa. Para estes casos utilizamos a nomenclatura “vai apresentar lixo” (por não ser um valor controlado).
&py (com o & a frente) vai apresentar o endereço de memória da própria variável py. Que não mudou e não vai mudar.
py – px = 3 Como a variável y foi acrescida de 3 endereços a mais que a variável x, a diferença será 3 (calculado em relação aos endereços que possuem).