Vous êtes sur la page 1sur 9

Fundamentos de Programao 1

Linguagem C
Ponteiros
Slice 14
Prof. SIMO
Jean Marcelo SIMO

Um ponteiro uma varivel que contm um endereo de


memria. Este endereo normalmente a posio de uma
outra varivel na memria. Se uma varivel contm o
endereo de um outra, ento a primeira varivel dita
apontar para a segunda [Schiltd, 1996].

Endereo na
memria

Varivel na
memria

1000

1003

1001

1002

1003

1004

Exemplo
#include <stdlib.h>
#include <stdio.h>
int main()
{
int x, y;
x = 1;
int* p;

// Declarao de um ponteiro para inteiro.


// Isto significa que p poder apontar para um inteiro.
// Um ponteiro declarado com auxilio do *

p = &x;

// Aqui o ponteiro recebe o endereo da varivel x na memria.


// Para um ponterio receber o endereo de uma varivel se faz
// necessrio utilizar o operador & antes da varivel.

y = *p;

// Aqui a varivel y recebe o valor da varivel apontada pelo


// ponteiro p. Na prtica, isto significa que y ter o valor
// da varivel x.
// Para uma varivel receber o valor da variavl apontado por
// um ponteiro, faz-se necessrio utilizar o operador *.
// Assim sendo, o operador * serve para diversas funes em C:
// - serve para declarar um ponteiro.
// - serve para informar o valor de uma varivel apontada.
// - serve para multiplicar dois nmeros (sua funo primordial).
// Portanto, o uso do * depende do contexto.

// ...

// ...
printf ("O
O valor da varivel x : %i. \n", x);
printf ("O
O endereo da varivel x : %p. \n", &x);
printf ("\n");
printf ("O
O valor da varivel x via o ponteiro p : %i. \n", *p);
printf ("O
O endereo da varivel x via o ponteiro p: %p. \n", p);
printf ("O
O endereo do ponteiro p : %p. \n", &p);
printf ("\n");
printf ("O
O valor da varivel y, adquirido de x, via p: %i. \n", y);
printf ("O
O endereo da varivel y : %p. \n", &y);
printf ("\n");
// O %p serve para expressar o valor de um endereo de memria.
system("Pause");
return 0;
}

Exemplo
#include <stdlib.h>
#include <stdio.h>
int main()
{
int x, y;
x = 1;
int *p;
p = &x;
y = *p;
printf ("O
O valor da varivel x : %i. \n", x);
O endereo da varivel x : %p. \n", &x);
printf ("O
printf ("\n");
printf ("O
O valor da varivel x via o ponteiro p : %i. \n", *p);
printf ("O
O endereo da varivel x via o ponteiro p: %p. \n", p);
printf ("O
O endereo do ponteiro p : %p. \n", &p);
printf ("\n");
printf ("O
O valor da varivel y, adquirido de x, via p: %i. \n", y);
printf ("O
O endereo da varivel y : %p. \n", &y);
printf ("\n");
// O %p serve para expressar o valor de um endereo de memria.
system("Pause");
return 0;
}

Exemplo 2
#include <stdlib.h>
#include <stdio.h>
int main()
{ int x, y; x = 1;
int *p;
p = &x;
y = *p;
printf ("O
O valor da varivel x : %i. \n", x);
O endereo da varivel x : %p. \n \n", &x);
printf ("O
printf ("O
O valor da varivel x via o ponteiro p : %i. \n", *p);
printf ("O
O endereo da varivel x via o ponteiro p: %p. \n", p);
printf ("O
O endereo do ponteiro p : %p. \n \n", &p);
printf ("O
O valor da varivel y, adquirido de x, via p: %i. \n", y);
printf ("O
O endereo da varivel y : %p. \n \n", &y);
*p = 5;

// Aqui muda-se o valor de x via *p.

O novo valor da varivel x : %i. \n", x);


printf("O
printf("O
O endereo da varivel x : %p. \n \n", &x);
O novo valor da varivel x via o ponteiro p: %i. \n", *p);
printf("O
printf("O
O endereo da varivel x via o ponteiro p: %p. \n", p);
printf("O
O endereo do ponteiro p : %p. \n \n", &p);
...
}

Exemplo 3
#include <stdlib.h>
#include <stdio.h>
// O segundo parmetro um ponteiro de real (float)
void area_quadrado (float ld, float *ar)
{
// Aqui o valor da varivel apontada pelo ponteiro ar ser alterada.
*ar = (ld * ld);
// bem por isto que se diz que uma passagem por referncia...
}
int main()
{
float lado, area;
area = -1;
lado = 2;
// No segundo parmeto passa-se o endereo da varivel area
// para o ponteiro ar, definido na funo acima (vide acima).
area_quadrado (lado, &area);
printf("O valor da rea : %f \n", area);
system("Pause");
return 0;
}

Vous aimerez peut-être aussi