Use o botão abaixo para reportar erros ou dar sugestões.

Computação Científica - Um Livro Colaborativo

5.2 Ponteiros


Ponteiros são variáveis que ocupam uma posição da memória mas estão preparados para armazenar endereços de outras variáveis. Usamos um asterístico para definir uma variável do tipo ponteiro. Por exemplo, um ponteiro apontado para um double por ser definido por double *p;.

Exemplo 5.2.1. Escreva um programa que lê um inteiro e armazena o endereço num ponteiro.

#include <stdio.h>  
#include <math.h>  
 
int main(void)  
{  
  int x;  
  int *y=NULL;  
  printf("digite o valor de x\n\n");  
  scanf("%d",&x);  
  y=&x;  
  printf("O valor de x é %d\n",x);  
  printf("O endereço de x na memória %p\n",y);  
}

Observe o detalhe na linha y=&x;, onde o ponteiro y recebe o endereço da variável x. A linha int *y=NULL; pode ser substituída por int *y;. A diferença é que na primeira dissemos explicitamente que o ponteiro int não está apontado para nenhuma variável e, na segunda não demos carga inicial. É sempre indicado dar carga inicial em ponteiros para produzir códigos mais seguros.

Se definirmos uma variável do tipo ponteiro para double com o nome p, então *p é o valor apontado pelo ponteiro. Observe uma versão do código do exemplo 5.2.1 que produz o mesmo resultado:

#include <stdio.h>  
#include <math.h>  
 
int main(void)  
{  
  int x;  
  int *y=NULL;  
  printf("digite o valor de x\n\n");  
  scanf("%d",&x);  
  y=&x;  
  printf("O valor de x é %d\n",*y);  
  printf("O endereço de x na memória %p\n",y);  
}

A linha printf("O valor de x é %d\n",*y); imprime o valor apontado pelo ponteiro y, que é o valor de x.

O ponteiro é uma variável como qualquer outra, o que permite a definição de um ponteiro que aponta outro ponteiro.

Exemplo 5.2.2. Escreva um programa define um double, depois um ponteiro para esse double, depois um ponteiro para o primeiro ponteiro.

#include <stdio.h>  
#include <math.h>  
 
int main(void)  
{  
  double x,*y,**z;  
  x=2.3;  
  y=&x;  
  z=&y;  
  printf("O valor de x é %f\n",x);  
  printf("O endereço de x é %p\n",&x);  
  printf("O valor de y é %p\n",y);  
  printf("O endereço de y é %p\n",&y);  
  printf("O valor apontado por y é %f\n",*y);  
  printf("O valor de z é %p\n",z);  
  printf("O endereço de z é %p\n",&z);  
  printf("O valor apontado por z é %p\n",*z);  
  printf("O valor apontado pela variável que está apontada por z é %f\n",**z);  
}

A instrução que atribui um valor para a uma variável através do ponteiro também é funciona.

Exemplo 5.2.3. Escreva uma programa que define uma variável sem atribuir valor, depois define um ponteiro apontado para essa variável e, finalmente, atribui valor para a variável usando o ponteiro.

#include <stdio.h>  
#include <math.h>  
 
int main(void)  
{  
  double x;  
  double *y=&x;  
  *y=2.4;  
  printf("O valor de x é %f\n",x);  
}

A necessidade de indicar o tipo de variável para onde o ponteiro aponta é devido ao tamanho de cada tipo de variável, que pode ocupar vários bytes. O ponteiro aponta para o primeiro byte e a informação do tipo diz o tamanho da variável em bytes.

O endereço de um vetor v é dado pelo endereço do seu primeiro elemento &v[0], que também pode ser chamado por v. Naturalmente, cada elemento também tem um endereço, sequencialmente a partir do primeiro.

Exemplo 5.2.4. Escreva um programa que define um vetor e imprime seu endereço.

#include <stdio.h>  
#include <math.h>  
 
int main(void)  
{  
  double x[3]={2.3,3.1,-1.2};  
  printf("O primeiro elemento é %f\n",x[0]);  
  printf("Esse é o endereço do primeiro elemento do vetor %p\n",&x[0]);  
  printf("Esse é o endereço do vetor %p\n",x);  
  printf("Esse é o endereço do segundo elemento do vetor %p\n",&x[1]);  
  printf("Esse é o endereço do terceiro elemento do vetor %p\n",&x[2]);  
}

Creative Commons License Este texto é disponibilizado nos termos da licença Creative Commons Atribuição-CompartilhaIgual 3.0 Não Adaptada (CC-BY-SA 3.0). Página gerada em 19/8/2020 às 17:33:16.

Informe erros ou edite você mesmo!