05/05/2014
Definição de Ponteiros

PONTEIROS


Curso: Ciência da Computação
Luciana Balieiro Cosme
Exemplo 1
int i=5;
printf(“Valor da variavel: %d”, i);
printf(“\nPonteiro da variavel:%d”,&i);

Ponteiros



Saída
Valor da variavel: 5
Ponteiro da variavel: 2686748
Declaração

int *p;
float *q;

O símbolo * indica que a variável é um ponteiro.

São variáveis que armazenam um endereço de
memória;
Acessam o próprio endereço da memória e não seu
conteúdo;
Apontam para uma variável de um determinado
tipo;
O endereço de uma variável é dado pelo
operador &.

É um tipo especial de variável que armazena
endereços;
Pode ter o valor NULL;
Se um ponteiro p armazena o endereço de uma
variável i, podemos dizer "p aponta para i" ou "p é
o endereço de i";
Nunca use um ponteiro que não foi inicializado.
Exemplo 2
int a=3, b=2,c;
int *p; /*p é um ponteiro para um inteiro*/
int *q;
p = &a; /*o valor de p é o endereço de a */
q = &b;
/* q aponta para b */
c = *p + *q; /* c recebe a soma de a + b */
printf(“%d”, c);
1
05/05/2014
Exemplo 3
int a=3, b=2, c;
int *p;
int **r;
/* r é um ponteiro para um
ponteiro para um inteiro */
p = &a;
/* p aponta para a */
r = &p;
/* r aponta para p e *r
aponta para a */
c = **r * b;
Exemplo 4: Troca o valor de duas
variáveis
void troca( int i, int j) {
int temp;
temp = i;
i = j;
j = temp;
}

Produz o valor desejado?
printf("\n%d", c);
Exemplo 4: Solução
void troca( int *p, int *q){
int temp;
temp = *p;
*p = *q;
*q = temp;
}
Vetores


Os elementos de qualquer vetor têm endereços
consecutivos na memória do computador;
Exemplo:
 int
v


*v;
= malloc( 10 * sizeof (int));
O ponteiro v aponta o primeiro elemento de um
vetor de 10 elementos.
<stdlib.h>
troca( &i, &j);
Vetores

O endereço do segundo elemento do vetor é v+1 e
o endereço do terceiro elemento é v+2;
int i,*v;
v = malloc( 100 * sizeof (int));
for (i = 0; i < 100; ++i){
v[i]=i;
printf(" %d ", *(v+i));
Matrizes
int **m;
m = malloc( 10 * sizeof (int));
for(i=0;i<10;i++)
m[i] = malloc( 10 * sizeof
(int));
}
2
05/05/2014
Exercícios
1.
Seja a seguinte seqüência de instruções em um programa
C:
int *pti;
int i = 10;
pti = &i;
Qual afirmativa é falsa?
a. pti armazena o endereço de i
b. *pti é igual a 10
c. ao se executar *pti = 20; i passará a ter o valor 20
d. ao se alterar o valor de i, *pti será modificado
e. pti é igual a 10
Leitura Complementar

http://www.ead.cpdee.ufmg.br/cursos/C/c.html
Exercícios
2.
Faca um programa que multiplique duas matrizes. O
programa deverá estar estruturado de maneira que:
a- o usuário forneça as dimensões das matrizes ( o nº de
col. da 1ª matriz deve ser igual ao nº de linhas da 2ª
matriz);
2- uma função para alocar as matrizes dinamicamente;
3- uma função para ler as matrizes;
4- uma função para somar as matrizes;
5- uma função para apresentar a matriz na tela.
Dúvidas?

[email protected]
3
Download

Aula 8 - Luciana Balieiro