Ponteiros em C

Ponteiros

Por: Eduardo Casavella

A utilização de ponteiros em linguagem C é uma das características que tornam a linguagem tão flexível e poderosa.

Ponteiros ou apontadores, são variáveis que armazenam o endereço de memória de outras variáveis.

Dizemos que um ponteiro “aponta” para uma varíável quando contém o endereço da mesma.

Os ponteiros podem apontar para qualquer tipo de variável. Portanto temos ponteiros para int, float, double, etc.

Por que usar ponteiros?

Ponteiros são muito úteis quando uma variável tem que ser acessada em diferentes partes de um programa.

Neste caso, o código pode ter vários ponteiros espalhados por diversas partes do programa, “apontando” para a variável que contém o dado desejado.

Caso este dado seja alterado, não há problema algum, pois todas as partes do programa tem um ponteiro que aponta para o endereço onde reside o dado atualizado.

Existem várias situações onde ponteiros são úteis, por exemplo:

  • Alocação dinâmica de memória
  • Manipulação de arrays.
  • Para retornar mais de um valor em uma função.
  • Referência para listas, pilhas, árvores e grafos.

Sintaxe de declaração de ponteiro

tipo *nome_ponteiro;

Onde temos:

tipo : é o tipo de dado da variável cujo endereço o ponteiro armazena.

*nome_ponteiro : O nome da variável ponteiro.

O asterisco * neste tipo de declaração determina que a variável será um ponteiro.

Exemplo de declaração de ponteiro:

int *ptr;

 

Exemplo: Programa utilizando ponteiro

#include <stdio.h>
#include <conio.h>

int main(void)
{
	//valor é a variável que
	//será apontada pelo ponteiro
	int valor = 27;
	
	//declaração de variável ponteiro
	int *ptr;
	
	//atribuindo o endereço da variável valor ao ponteiro
	ptr = &valor;
	
	printf("Utilizando ponteiros\n\n");
	printf ("Conteudo da variavel valor: %d\n", valor);
	printf ("Endereço da variavel valor: %x \n", &valor);
	printf ("Conteudo da variavel ponteiro ptr: %x", ptr);
	
	getch();
	return(0);
}

 

Tela de Execução

execuçao do programa usando ponteiro

Tela de execução do programa usando ponteiro

Explicação detalhada do código sobre ponteiros

//valor é a variável que será apontada pelo ponteiro
int valor = 27;

//declaração de variável ponteiro
int *ptr;

Note que foi usado o operador * para designar que a variável ptr é um ponteiro. Como a intenção é armazenar o endereço da variável denominada valor que é uma variável do tipo int, o ponteiro também tem que ser do tipo int. Isto significa que vai apontar para uma variável do tipo inteiro.

//atribuindo o endereço de valor ao ponteiro
ptr = &valor;

Para atribuir o endereço da variável valor ao ponteiro ptr utilizamos o operador de endereço &, pois estamos nos referindo ao endereço da variável valor e não ao conteúdo da mesma.

   printf("Utilizando ponteiros\n\n");
   printf ("Conteudo da variavel valor: %d\n", valor);
   printf ("Endereço da variavel valor: %x \n", &valor);
   printf ("Conteudo da variavel ponteiro ptr: %x", ptr);

Foi utilizado %x para exibir o endereço e o conteúdo do ponteiro ptr, pois trata-se de um valor hexadecimal por ser endereço de memória.

Vejamos a seguir um outro exemplo da utilização de ponteiros.

No vídeo acima foi apresentado o conceito de ponteiro para ponteiro.

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
  int x, *ptrx, **pptrx;
  
  //inicializando a variavel com zero
  x = 0;
  printf("\nvalor de x = %d\n", x);
  printf("Endereco de x: %x\n\n",&x);
  
  
  //Atribuindo os enderecos para os ponteiros
  ptrx = &x; // ptrx aponta para x
  pptrx = &ptrx; // pptrx aponta para ptrx    
    
  *ptrx = *ptrx + 10;
  printf("\nvalor de x = %d", x);
  printf("\nEndereco apontado por ptrx: %x\n",ptrx);
  printf("Valor da variavel X que esta sendo apontada por ptrx: %d\n",*ptrx);
  printf("Endereco de memoria da variavel ptrx %x\n",&ptrx); 
 
  **pptrx = **pptrx + 10;
  printf("\n\nvalor de x = %d", x);
  printf("\nEndereco apontado por **pptrx: %x",pptrx);
  printf("\nValor da variavel para a qual pptrx faz referencia: %d",**pptrx);
  printf("\nEndereco de memoria da variavel **pptrx %x\n\n",&pptrx);
  
   
  return 0;
}

Até a próxima!

10 respostas a Ponteiros em C