Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Ponteiros
A linguagem C permite que o programador referencie
a posio de objetos bem como os prprios objetos
(isto , o contedo de suas posies).
Por exemplo, se x for declarado como um inteiro, &x
se referir posio reservada para conter x. &x
chamado ponteiro.
Ponteiros
possvel declarar uma varivel cujo tipo de dado
seja um ponteiro e cujos possveis valores sejam
posies de memria. Por exemplo, as declaraes:
int *pi;
float *pf;
char *pc;
Ponteiros
So declaraes de trs variveis ponteiros:
pi um ponteiro para um inteiro;
pf um ponteiro para um float;
pc um ponteiro para um caractere.
Ponteiros
Um ponteiro como qualquer outro tipo de dado em
C. O valor de um ponteiro uma posio de memria
da mesma forma que o valor de um inteiro um
nmero. Os valores dos ponteiros podem ser
atribudos como quaisquer outros valores.
Por exemplo, a declarao:
pi = &x; atribui o endereo do inteiro x varivel
ponteiro pi.
Ponteiros
A notao *pi em C refere-se ao inteiro na posio
referenciada pelo ponteiro pi. A declarao:
x = *pi; atribui o valor deste inteiro varivel inteira x.
int x;
int y;
y = &x;
Ponteiros
No possvel atribuir um ponteiro para inteiro x a
uma varivel y. Para isso necessrio que y, seja
declarado como um ponteiro.
A linguagem C insiste em que uma declarao de um
ponteiro especifique o tipo de dado para o qual o
ponteiro aponta.
Ponteiros
Uma rea na qual os ponteiros de C desempenham
um notvel papel na passagem de parmetros para
funes.
Normalmente, os parmetros so passados para um
funo em C por valor, isto , os valores sendo
passados so copiados nos parmetros da funo
chamada no momento em que a funo for
chamada.
Ponteiros
Se o valor de um parmetro for alterado dentro da
funo, o valor no programa de chamada no ser
modificado.
108
104
108
104
108
py
104
108
py
108
104
108
py
108
104
Ponteiro de Ponteiro
possvel pela linguagem C, a definio de ponteiro
de ponteiro, isto , uma varivel ponteiro que pode
receber o endereo de outra varivel ponteiro. Por
exemplo, a declarao:
int *px;
int **py;
Ponteiro de Ponteiro
Dessa forma, a seguinte atribuio vlida:
py = &px; em que o ponteiro de ponteiro py aponta para o
mesmo endereo do ponteiro px.
Se a declarao fosse realizada da seguinte forma:
int *px;
int *py;
py = &px;
Ocasionaria uma operao invlida de atribuio do endereo
de um ponteiro para outro ponteiro. Para isso, necessrio
um ponteiro de ponteiro.
*px = x*(*px);
printf("\n\n*px = x*(*px)");
printf("\nO valor de x: %i",x);
printf("\nO valor de px: %i",*px);
py = &px;
printf("\n\npy = &px");
printf("\nO endereco de px:
%i",&px);
printf("\nO endereco de py:
%i",&py);
printf("\nO endereco que py aponta:
%i",py);
printf("\n\nO valor de px: %i",*px);
printf("\nO valor de py: %i",**py);
**py = *px * x;
printf("\n\n**py = *px * x");
printf("\nO valor de x: %i",x);
printf("\nO valor de px: %i",*px);
printf("\nO valor de py: %i",**py);
getche();
x
10
*px
100
10000
2293620
2293620
2293616
2293616
2293612
**py
...
n-1