89
Laboratório de Programação II Aula 05 Prof. Diemesleno Souza Carvalho [email protected] http://www.diemesleno.com.br

Laboratório de Programação II - diemesleno.com.br · A forma geral para se declarar um vetor de ponteiros é: int *pmatrix[10]; No exemplo acima, estamos declarando um vetor de

Embed Size (px)

Citation preview

Page 1: Laboratório de Programação II - diemesleno.com.br · A forma geral para se declarar um vetor de ponteiros é: int *pmatrix[10]; No exemplo acima, estamos declarando um vetor de

Laboratório de Programação II

Aula 05 Prof. Diemesleno Souza [email protected]://www.diemesleno.com.br

Page 2: Laboratório de Programação II - diemesleno.com.br · A forma geral para se declarar um vetor de ponteiros é: int *pmatrix[10]; No exemplo acima, estamos declarando um vetor de

Na aula passada vimos...

Page 3: Laboratório de Programação II - diemesleno.com.br · A forma geral para se declarar um vetor de ponteiros é: int *pmatrix[10]; No exemplo acima, estamos declarando um vetor de

Na aula passada vimos...

04 – Matrizes e strings;

Page 4: Laboratório de Programação II - diemesleno.com.br · A forma geral para se declarar um vetor de ponteiros é: int *pmatrix[10]; No exemplo acima, estamos declarando um vetor de

Na aula de hoje veremos...

Page 5: Laboratório de Programação II - diemesleno.com.br · A forma geral para se declarar um vetor de ponteiros é: int *pmatrix[10]; No exemplo acima, estamos declarando um vetor de

Na aula de hoje veremos...

05 – Ponteiros;

Page 6: Laboratório de Programação II - diemesleno.com.br · A forma geral para se declarar um vetor de ponteiros é: int *pmatrix[10]; No exemplo acima, estamos declarando um vetor de

Ponteiros

Page 7: Laboratório de Programação II - diemesleno.com.br · A forma geral para se declarar um vetor de ponteiros é: int *pmatrix[10]; No exemplo acima, estamos declarando um vetor de

Ponteiros

A linguagem C é altamente dependente dos ponteiros.

Para ser um bom programador em C é fundamental que se tenha um bom domínio deles.

Page 8: Laboratório de Programação II - diemesleno.com.br · A forma geral para se declarar um vetor de ponteiros é: int *pmatrix[10]; No exemplo acima, estamos declarando um vetor de

Ponteiros

Como funcionam os ponteiros?

Page 9: Laboratório de Programação II - diemesleno.com.br · A forma geral para se declarar um vetor de ponteiros é: int *pmatrix[10]; No exemplo acima, estamos declarando um vetor de

Ponteiros

Como funcionam os ponteiros?

Os ints guardam inteiros.

Os floats guardam números de ponto flutuante.

Os chars guardam caracteres.

Ponteiros guardam endereços de memória.

Page 10: Laboratório de Programação II - diemesleno.com.br · A forma geral para se declarar um vetor de ponteiros é: int *pmatrix[10]; No exemplo acima, estamos declarando um vetor de

Ponteiros

No C quando declaramos ponteiros, nós informamos ao compilador para que tipo de variável vamos apontá-lo.

Um ponteiro int aponta para um inteiro, isto é, guarda o endereço de memória de um inteiro.

Page 11: Laboratório de Programação II - diemesleno.com.br · A forma geral para se declarar um vetor de ponteiros é: int *pmatrix[10]; No exemplo acima, estamos declarando um vetor de

Ponteiros

Declarando e utilizando ponteiros

Page 12: Laboratório de Programação II - diemesleno.com.br · A forma geral para se declarar um vetor de ponteiros é: int *pmatrix[10]; No exemplo acima, estamos declarando um vetor de

Ponteiros

Declarando e utilizando ponteiros

A forma geral para declarar um ponteiro é:

tipo_do_ponteiro *nome_da_variável;

Page 13: Laboratório de Programação II - diemesleno.com.br · A forma geral para se declarar um vetor de ponteiros é: int *pmatrix[10]; No exemplo acima, estamos declarando um vetor de

Ponteiros

Declarando e utilizando ponteiros

A forma geral para declarar um ponteiro é:

tipo_do_ponteiro *nome_da_variável;

É o asterisco (*) que faz o compilador saber que aquela variável não vai guardar valor mas sim um endereço de memória para aquele tipo especificado.

Page 14: Laboratório de Programação II - diemesleno.com.br · A forma geral para se declarar um vetor de ponteiros é: int *pmatrix[10]; No exemplo acima, estamos declarando um vetor de

Ponteiros

Declarando e utilizando ponteiros

A forma geral para declarar um ponteiro é:

tipo_do_ponteiro *nome_da_variável;

É o asterisco (*) que faz o compilador saber que aquela variável não vai guardar valor mas sim um endereço de memória para aquele tipo especificado.

int *pont1;

char *temp, *pont2;

Page 15: Laboratório de Programação II - diemesleno.com.br · A forma geral para se declarar um vetor de ponteiros é: int *pmatrix[10]; No exemplo acima, estamos declarando um vetor de

Ponteiros

Declarando e utilizando ponteiros

A forma geral para declarar um ponteiro é:

int *pont1;

char *temp, *pont2;

Eles ainda não foram inicializados, pois estão somente declarados; Isso significa que eles apontam para um lugar indefinido na memória.

Page 16: Laboratório de Programação II - diemesleno.com.br · A forma geral para se declarar um vetor de ponteiros é: int *pmatrix[10]; No exemplo acima, estamos declarando um vetor de

Ponteiros

Declarando e utilizando ponteiros

A forma geral para declarar um ponteiro é:

int *pont1;

char *temp, *pont2;

Eles ainda não foram inicializados, pois estão somente declarados; Isso significa que eles apontam para um lugar indefinido na memória.

Este lugar pode estar, por exemplo, na porção da memória reservada ao sistema operacional do computador. Usar o ponteiro nestas circunstâncias pode levar a um travamento por exemplo.

Page 17: Laboratório de Programação II - diemesleno.com.br · A forma geral para se declarar um vetor de ponteiros é: int *pmatrix[10]; No exemplo acima, estamos declarando um vetor de

Ponteiros

Declarando e utilizando ponteiros

A forma geral para declarar um ponteiro é:

int *pont1;

char *temp, *pont2;

Portanto, é muito importante que um ponteiro seja inicializado (apontado para algum lugar conhecido) antes de ser usado.

Page 18: Laboratório de Programação II - diemesleno.com.br · A forma geral para se declarar um vetor de ponteiros é: int *pmatrix[10]; No exemplo acima, estamos declarando um vetor de

Ponteiros

Declarando e utilizando ponteiros

A forma geral para declarar um ponteiro é:

int *pont1;

char *temp, *pont2;

Para inicializar um ponteiro, basta igualá-lo a uma variável já declarada no programa juntamente com o caractere &

Page 19: Laboratório de Programação II - diemesleno.com.br · A forma geral para se declarar um vetor de ponteiros é: int *pmatrix[10]; No exemplo acima, estamos declarando um vetor de

Ponteiros

Declarando e utilizando ponteiros

A forma geral para declarar um ponteiro é:

int *pont1;

char *temp, *pont2;

Para inicializar um ponteiro, basta igualá-lo a uma variável já declarada no programa juntamente com o caractere &

int contador = 10;

pont1 = &contador;

Page 20: Laboratório de Programação II - diemesleno.com.br · A forma geral para se declarar um vetor de ponteiros é: int *pmatrix[10]; No exemplo acima, estamos declarando um vetor de

Ponteiros

Declarando e utilizando ponteiros

A forma geral para declarar um ponteiro é:

int *pont1;

char *temp, *pont2;

Para inicializar um ponteiro, basta igualá-lo a uma variável já declarada no programa juntamente com o caractere &

int contador = 10;

pont1 = &contador;

Page 21: Laboratório de Programação II - diemesleno.com.br · A forma geral para se declarar um vetor de ponteiros é: int *pmatrix[10]; No exemplo acima, estamos declarando um vetor de

Ponteiros

Declarando e utilizando ponteiros

A forma geral para declarar um ponteiro é:

int *pont1;

char *temp, *pont2;

Para inicializar um ponteiro, basta igualá-lo a uma variável já declarada no programa juntamente com o caractere &

int contador = 10;

pont1 = &contador;

Criamos um ponteiro para um inteiro 'pont1' e um inteiro 'contador' inicializado com o valor 10.

A expressão &contador nos dá o endereço de 'contador' na memória, o qual armazenamos em 'pont1'.

Page 22: Laboratório de Programação II - diemesleno.com.br · A forma geral para se declarar um vetor de ponteiros é: int *pmatrix[10]; No exemplo acima, estamos declarando um vetor de

Ponteiros

Declarando e utilizando ponteiros

A forma geral para declarar um ponteiro é:

int *pont1;

int contador = 10;

pont1 = &contador;

A partir do momento que nós colocamos um endereço no nosso ponteiro 'pont1', ele está agora pronto para ser utilizado.

Page 23: Laboratório de Programação II - diemesleno.com.br · A forma geral para se declarar um vetor de ponteiros é: int *pmatrix[10]; No exemplo acima, estamos declarando um vetor de

Ponteiros

Declarando e utilizando ponteiros

A forma geral para declarar um ponteiro é:

int *pont1;

int contador = 10;

pont1 = &contador;

Podemos, por exemplo, alterar o valor de 'contador' usando o ponteiro 'pont1'.

Para isso, bastamos alterar o valor utilizando o próprio ponteiro juntamente com o caractere '*'.

Page 24: Laboratório de Programação II - diemesleno.com.br · A forma geral para se declarar um vetor de ponteiros é: int *pmatrix[10]; No exemplo acima, estamos declarando um vetor de

Ponteiros

Declarando e utilizando ponteiros

A forma geral para declarar um ponteiro é:

int *pont1;

int contador = 10;

pont1 = &contador;

*pont1 = 12;Podemos, por exemplo, alterar o valor de 'contador' usando o ponteiro 'pont1'.

Para isso, bastamos alterar o valor utilizando o próprio ponteiro juntamente com o caractere '*'.

Page 25: Laboratório de Programação II - diemesleno.com.br · A forma geral para se declarar um vetor de ponteiros é: int *pmatrix[10]; No exemplo acima, estamos declarando um vetor de

Ponteiros

Declarando e utilizando ponteiros

A forma geral para declarar um ponteiro é:

int *pont1;

int contador = 10;

pont1 = &contador;

*pont1 = 12;

Agora, a variável 'contador'que antes valia 10 agoravale 12.

Page 26: Laboratório de Programação II - diemesleno.com.br · A forma geral para se declarar um vetor de ponteiros é: int *pmatrix[10]; No exemplo acima, estamos declarando um vetor de

Ponteiros

Crie o programa61.c

Page 27: Laboratório de Programação II - diemesleno.com.br · A forma geral para se declarar um vetor de ponteiros é: int *pmatrix[10]; No exemplo acima, estamos declarando um vetor de

Ponteiros

Digite o seguinte código:

Page 28: Laboratório de Programação II - diemesleno.com.br · A forma geral para se declarar um vetor de ponteiros é: int *pmatrix[10]; No exemplo acima, estamos declarando um vetor de

Ponteiros

Compilado e rodando...

Page 29: Laboratório de Programação II - diemesleno.com.br · A forma geral para se declarar um vetor de ponteiros é: int *pmatrix[10]; No exemplo acima, estamos declarando um vetor de

Ponteiros

Entendendo o código:

Page 30: Laboratório de Programação II - diemesleno.com.br · A forma geral para se declarar um vetor de ponteiros é: int *pmatrix[10]; No exemplo acima, estamos declarando um vetor de

Ponteiros

Crie o programa62.c

Page 31: Laboratório de Programação II - diemesleno.com.br · A forma geral para se declarar um vetor de ponteiros é: int *pmatrix[10]; No exemplo acima, estamos declarando um vetor de

Ponteiros

Digite o seguinte código:

Page 32: Laboratório de Programação II - diemesleno.com.br · A forma geral para se declarar um vetor de ponteiros é: int *pmatrix[10]; No exemplo acima, estamos declarando um vetor de

Ponteiros

Compilando e rodando...

Page 33: Laboratório de Programação II - diemesleno.com.br · A forma geral para se declarar um vetor de ponteiros é: int *pmatrix[10]; No exemplo acima, estamos declarando um vetor de

Ponteiros

Entendendo o código:

Page 34: Laboratório de Programação II - diemesleno.com.br · A forma geral para se declarar um vetor de ponteiros é: int *pmatrix[10]; No exemplo acima, estamos declarando um vetor de

Ponteiros

Podemos realizar operações aritméticas com ponteiros.

Podemos por exemplo, igualar dois ponteiros. Se temos dois ponteiros p1 e p2 podemos igualá-los fazendo:

p1 = p2;

Desta forma estamos fazendo com que o ponteiro p1 aponte para o mesmo lugar (na memória) que p2.

Page 35: Laboratório de Programação II - diemesleno.com.br · A forma geral para se declarar um vetor de ponteiros é: int *pmatrix[10]; No exemplo acima, estamos declarando um vetor de

Ponteiros

Crie o programa63.c

Page 36: Laboratório de Programação II - diemesleno.com.br · A forma geral para se declarar um vetor de ponteiros é: int *pmatrix[10]; No exemplo acima, estamos declarando um vetor de

Ponteiros

Digite o seguinte código:

Page 37: Laboratório de Programação II - diemesleno.com.br · A forma geral para se declarar um vetor de ponteiros é: int *pmatrix[10]; No exemplo acima, estamos declarando um vetor de

Ponteiros

Compilado e rodando...

Page 38: Laboratório de Programação II - diemesleno.com.br · A forma geral para se declarar um vetor de ponteiros é: int *pmatrix[10]; No exemplo acima, estamos declarando um vetor de

Ponteiros

Compilado e rodando...

Repare que não somente o endereço de memória foi atribuído ao ponteiro 1 mas também o valor que o mesmo guardava.

Page 39: Laboratório de Programação II - diemesleno.com.br · A forma geral para se declarar um vetor de ponteiros é: int *pmatrix[10]; No exemplo acima, estamos declarando um vetor de

Ponteiros

Entendendo o código:

Page 40: Laboratório de Programação II - diemesleno.com.br · A forma geral para se declarar um vetor de ponteiros é: int *pmatrix[10]; No exemplo acima, estamos declarando um vetor de

Ponteiros

Crie o programa64.c

Page 41: Laboratório de Programação II - diemesleno.com.br · A forma geral para se declarar um vetor de ponteiros é: int *pmatrix[10]; No exemplo acima, estamos declarando um vetor de

Ponteiros

Digite o seguinte código:

Page 42: Laboratório de Programação II - diemesleno.com.br · A forma geral para se declarar um vetor de ponteiros é: int *pmatrix[10]; No exemplo acima, estamos declarando um vetor de

Ponteiros

Compilado e rodando...

Page 43: Laboratório de Programação II - diemesleno.com.br · A forma geral para se declarar um vetor de ponteiros é: int *pmatrix[10]; No exemplo acima, estamos declarando um vetor de

Ponteiros

Compilado e rodando...

Repare que agora somente o valor foiatribuído. O endereço de memória continua o mesmo.

Page 44: Laboratório de Programação II - diemesleno.com.br · A forma geral para se declarar um vetor de ponteiros é: int *pmatrix[10]; No exemplo acima, estamos declarando um vetor de

Ponteiros

Entendendo o código:

Page 45: Laboratório de Programação II - diemesleno.com.br · A forma geral para se declarar um vetor de ponteiros é: int *pmatrix[10]; No exemplo acima, estamos declarando um vetor de

Ponteiros

Incremento e decremento de ponteiros

Page 46: Laboratório de Programação II - diemesleno.com.br · A forma geral para se declarar um vetor de ponteiros é: int *pmatrix[10]; No exemplo acima, estamos declarando um vetor de

Ponteiros

Incremento e decremento de ponteiros

Quando incrementamos um ponteiro, ele passa a apontar para o próximo valor do mesmo tipo para o qual o ponteiro aponta.

Isto é, se temos um ponteiro para um inteiro e o incrementamos ele passa a apontar para o próximo inteiro da memória.

Se você incrementa um ponteiro char* ele anda 1 byte ne memória e se você incrementa um ponteiro double* ele anda 8 bytes na memória.

O decremento funciona semelhante.

Page 47: Laboratório de Programação II - diemesleno.com.br · A forma geral para se declarar um vetor de ponteiros é: int *pmatrix[10]; No exemplo acima, estamos declarando um vetor de

Ponteiros

Crie o programa65.c

Page 48: Laboratório de Programação II - diemesleno.com.br · A forma geral para se declarar um vetor de ponteiros é: int *pmatrix[10]; No exemplo acima, estamos declarando um vetor de

Ponteiros

Digite o seguinte código:

Page 49: Laboratório de Programação II - diemesleno.com.br · A forma geral para se declarar um vetor de ponteiros é: int *pmatrix[10]; No exemplo acima, estamos declarando um vetor de

Ponteiros

Digite o seguinte código:

Page 50: Laboratório de Programação II - diemesleno.com.br · A forma geral para se declarar um vetor de ponteiros é: int *pmatrix[10]; No exemplo acima, estamos declarando um vetor de

Ponteiros

Digite o seguinte código:

Repare que incrementamos o ponteiro para que ele aponte para o próximo inteiro e não o valor que ele tinha.

Page 51: Laboratório de Programação II - diemesleno.com.br · A forma geral para se declarar um vetor de ponteiros é: int *pmatrix[10]; No exemplo acima, estamos declarando um vetor de

Ponteiros

Entendendo o código:

Page 52: Laboratório de Programação II - diemesleno.com.br · A forma geral para se declarar um vetor de ponteiros é: int *pmatrix[10]; No exemplo acima, estamos declarando um vetor de

Ponteiros

Crie o programa66.c

Page 53: Laboratório de Programação II - diemesleno.com.br · A forma geral para se declarar um vetor de ponteiros é: int *pmatrix[10]; No exemplo acima, estamos declarando um vetor de

Ponteiros

Digite o seguinte código:

Page 54: Laboratório de Programação II - diemesleno.com.br · A forma geral para se declarar um vetor de ponteiros é: int *pmatrix[10]; No exemplo acima, estamos declarando um vetor de

Ponteiros

Compilado e rodando...

Page 55: Laboratório de Programação II - diemesleno.com.br · A forma geral para se declarar um vetor de ponteiros é: int *pmatrix[10]; No exemplo acima, estamos declarando um vetor de

Ponteiros

Compilado e rodando...

Repare que agora sim, incrementamos apenas o valor que estava no ponteiro.

Page 56: Laboratório de Programação II - diemesleno.com.br · A forma geral para se declarar um vetor de ponteiros é: int *pmatrix[10]; No exemplo acima, estamos declarando um vetor de

Ponteiros

Entendendo o código:

Page 57: Laboratório de Programação II - diemesleno.com.br · A forma geral para se declarar um vetor de ponteiros é: int *pmatrix[10]; No exemplo acima, estamos declarando um vetor de

Ponteiros

Ponteiros e vetores

Page 58: Laboratório de Programação II - diemesleno.com.br · A forma geral para se declarar um vetor de ponteiros é: int *pmatrix[10]; No exemplo acima, estamos declarando um vetor de

Ponteiros

Ponteiros e vetores têm uma ligação muito forte.

Quando você declara uma matriz da seguinte forma:

tipo_da_variável nome_da_variável[tam1][tam2];

o compilador C calcula o tamanho, em bytes, necessário para armazenar esta matriz. Este tamanho é:

tam1 x tam2 x tamanho_do_tipo

O compilador então aloca este número de bytes em um espaço livre de memória. O nome da variável que você declarou é na verdade um ponteiro para o tipo da variável da matriz.

Page 59: Laboratório de Programação II - diemesleno.com.br · A forma geral para se declarar um vetor de ponteiros é: int *pmatrix[10]; No exemplo acima, estamos declarando um vetor de

Ponteiros

tipo_da_variável nome_da_variável[tam1][tam2];

o compilador C calcula o tamanho, em bytes, necessário para armazenar esta matriz. Este tamanho é:

tam1 x tam2 x tamanho_do_tipo

O compilador então aloca este número de bytes em um espaço livre de memória. O nome da variável que você declarou é na verdade um ponteiro para o tipo da variável da matriz.

Tendo alocado na memória o espaço para a matriz, ele toma o nome da variável (que é um ponteiro) e aponta para o primeiro elemento da matriz.

Page 60: Laboratório de Programação II - diemesleno.com.br · A forma geral para se declarar um vetor de ponteiros é: int *pmatrix[10]; No exemplo acima, estamos declarando um vetor de

Ponteiros

tipo_da_variável nome_da_variável[tam1][tam2];

o compilador C calcula o tamanho, em bytes, necessário para armazenar esta matriz. Este tamanho é:

tam1 x tam2 x tamanho_do_tipo

O compilador então aloca este número de bytes em um espaço livre de memória. O nome da variável que você declarou é na verdade um ponteiro para o tipo da variável da matriz.

Tendo alocado na memória o espaço para a matriz, ele toma o nome da variável (que é um ponteiro) e aponta para o primeiro elemento da matriz.

nome_da_variável[índice];

Page 61: Laboratório de Programação II - diemesleno.com.br · A forma geral para se declarar um vetor de ponteiros é: int *pmatrix[10]; No exemplo acima, estamos declarando um vetor de

Ponteiros

tipo_da_variável nome_da_variável[tam1][tam2];

o compilador C calcula o tamanho, em bytes, necessário para armazenar esta matriz. Este tamanho é:

tam1 x tam2 x tamanho_do_tipo

O compilador então aloca este número de bytes em um espaço livre de memória. O nome da variável que você declarou é na verdade um ponteiro para o tipo da variável da matriz.

Tendo alocado na memória o espaço para a matriz, ele toma o nome da variável (que é um ponteiro) e aponta para o primeiro elemento da matriz.

nome_da_variável[índice];*(nome_da_variável+índice);

Page 62: Laboratório de Programação II - diemesleno.com.br · A forma geral para se declarar um vetor de ponteiros é: int *pmatrix[10]; No exemplo acima, estamos declarando um vetor de

Ponteiros

Crie o programa67.c

Page 63: Laboratório de Programação II - diemesleno.com.br · A forma geral para se declarar um vetor de ponteiros é: int *pmatrix[10]; No exemplo acima, estamos declarando um vetor de

Ponteiros

Crie o programa67.c

Page 64: Laboratório de Programação II - diemesleno.com.br · A forma geral para se declarar um vetor de ponteiros é: int *pmatrix[10]; No exemplo acima, estamos declarando um vetor de

Ponteiros

Compilado e rodando...

Page 65: Laboratório de Programação II - diemesleno.com.br · A forma geral para se declarar um vetor de ponteiros é: int *pmatrix[10]; No exemplo acima, estamos declarando um vetor de

Ponteiros

Entendendo o código:

Page 66: Laboratório de Programação II - diemesleno.com.br · A forma geral para se declarar um vetor de ponteiros é: int *pmatrix[10]; No exemplo acima, estamos declarando um vetor de

Ponteiros

Desta forma podemos entender como funciona um vetor. Sabendo que:

int nome_da_variável[5];

*nome_da_variável é o mesmo que nome_da_variável[0];

O ponteiro sem índice aponta sempre para o primeiro elemento.

Page 67: Laboratório de Programação II - diemesleno.com.br · A forma geral para se declarar um vetor de ponteiros é: int *pmatrix[10]; No exemplo acima, estamos declarando um vetor de

Ponteiros

Agora também entendemos o que ocorreu no nosso programa42.c

Page 68: Laboratório de Programação II - diemesleno.com.br · A forma geral para se declarar um vetor de ponteiros é: int *pmatrix[10]; No exemplo acima, estamos declarando um vetor de

Ponteiros

Agora também entendemos o que ocorreu no nosso programa42.c

Page 69: Laboratório de Programação II - diemesleno.com.br · A forma geral para se declarar um vetor de ponteiros é: int *pmatrix[10]; No exemplo acima, estamos declarando um vetor de

Ponteiros

Agora também entendemos o que ocorreu no nosso programa42.c

O ponteiro não sabe o tamanho do vetor. Ele apenasaloca a memória, ajusta o ponteiro para o início do mesmo e quando utilizamos os índices, encontra oselementos requisitados, estando ou não dentro do vetor.

Page 70: Laboratório de Programação II - diemesleno.com.br · A forma geral para se declarar um vetor de ponteiros é: int *pmatrix[10]; No exemplo acima, estamos declarando um vetor de

Ponteiros

Ponteiros como vetores

Page 71: Laboratório de Programação II - diemesleno.com.br · A forma geral para se declarar um vetor de ponteiros é: int *pmatrix[10]; No exemplo acima, estamos declarando um vetor de

Ponteiros

Ponteiros como vetores

Sabemos agora que, na verdade, o nome de um vetor é um ponteiro constante. Sabemos também que podemos indexar o nome de um vetor.

Como consequência podemos também indexar um ponteiro qualquer.

Page 72: Laboratório de Programação II - diemesleno.com.br · A forma geral para se declarar um vetor de ponteiros é: int *pmatrix[10]; No exemplo acima, estamos declarando um vetor de

Ponteiros

Crie o programa68.c

Page 73: Laboratório de Programação II - diemesleno.com.br · A forma geral para se declarar um vetor de ponteiros é: int *pmatrix[10]; No exemplo acima, estamos declarando um vetor de

Ponteiros

Digite o seguinte código:

Page 74: Laboratório de Programação II - diemesleno.com.br · A forma geral para se declarar um vetor de ponteiros é: int *pmatrix[10]; No exemplo acima, estamos declarando um vetor de

Ponteiros

Compilado e rodando...

Page 75: Laboratório de Programação II - diemesleno.com.br · A forma geral para se declarar um vetor de ponteiros é: int *pmatrix[10]; No exemplo acima, estamos declarando um vetor de

Ponteiros

Entendendo o código:

Page 76: Laboratório de Programação II - diemesleno.com.br · A forma geral para se declarar um vetor de ponteiros é: int *pmatrix[10]; No exemplo acima, estamos declarando um vetor de

Ponteiros

Desta forma, como strings são vetores de caracteres (char*), podemos escrever uma função que faça o mesmo que a já conhecida:

strcpy(string_destino, string_origem);

Page 77: Laboratório de Programação II - diemesleno.com.br · A forma geral para se declarar um vetor de ponteiros é: int *pmatrix[10]; No exemplo acima, estamos declarando um vetor de

Ponteiros

Crie o programa69.c

Page 78: Laboratório de Programação II - diemesleno.com.br · A forma geral para se declarar um vetor de ponteiros é: int *pmatrix[10]; No exemplo acima, estamos declarando um vetor de

Ponteiros

Digite o seguinte código:

Page 79: Laboratório de Programação II - diemesleno.com.br · A forma geral para se declarar um vetor de ponteiros é: int *pmatrix[10]; No exemplo acima, estamos declarando um vetor de

Ponteiros

Digite o seguinte código:

Page 80: Laboratório de Programação II - diemesleno.com.br · A forma geral para se declarar um vetor de ponteiros é: int *pmatrix[10]; No exemplo acima, estamos declarando um vetor de

Ponteiros

Entendendo o código:

Page 81: Laboratório de Programação II - diemesleno.com.br · A forma geral para se declarar um vetor de ponteiros é: int *pmatrix[10]; No exemplo acima, estamos declarando um vetor de

Ponteiros

Vetores de ponteiros

Page 82: Laboratório de Programação II - diemesleno.com.br · A forma geral para se declarar um vetor de ponteiros é: int *pmatrix[10]; No exemplo acima, estamos declarando um vetor de

Ponteiros

Vetores de ponteiros

Podemos construir vetores de ponteiros como declaramos vetores de qualquer outro tipo.

A forma geral para se declarar um vetor de ponteiros é:

int *pmatrix[10];

No exemplo acima, estamos declarando um vetor de ponteiros do tipo int para armazenar 10 ponteiros.

Page 83: Laboratório de Programação II - diemesleno.com.br · A forma geral para se declarar um vetor de ponteiros é: int *pmatrix[10]; No exemplo acima, estamos declarando um vetor de

Ponteiros

Cuidados a serem tomados ao se usar ponteiros

Page 84: Laboratório de Programação II - diemesleno.com.br · A forma geral para se declarar um vetor de ponteiros é: int *pmatrix[10]; No exemplo acima, estamos declarando um vetor de

Ponteiros

Cuidados a serem tomados ao se usar ponteiros

Os principais cuidados ao se usar um ponteiro devem ser:

1 - Saber sempre para onde o ponteiro está apontando;2 - Nunca utilizar um ponteiro que não foi inicializado;3 - Saber utilizar os caracteres * e &;

Page 85: Laboratório de Programação II - diemesleno.com.br · A forma geral para se declarar um vetor de ponteiros é: int *pmatrix[10]; No exemplo acima, estamos declarando um vetor de

Ponteiros

Resumo

Page 86: Laboratório de Programação II - diemesleno.com.br · A forma geral para se declarar um vetor de ponteiros é: int *pmatrix[10]; No exemplo acima, estamos declarando um vetor de

Ponteiros

Resumo

- Para declararmos um ponteiro fazemos:tipo *pont;

- Para inicializarmos um ponteiro fazemos:pont = &variavel;

- Para imprimirmos endereço de memória do ponteiro fazemos:printf("%p", pont);

- Para imprimirmos o valor que está no ponteiro fazemos:printf("%tipo", *pont);

- Para alterarmos o valor que está em um ponteiro fazemos:*pont = novo_valor;

- Para colocarmos 2 ponteiros apontando para o mesmo local:pont1 = pont2;

- Para colocarmos 2 ponteiros com o mesmo valor fazemos:*pont1 = *pont2;

Page 87: Laboratório de Programação II - diemesleno.com.br · A forma geral para se declarar um vetor de ponteiros é: int *pmatrix[10]; No exemplo acima, estamos declarando um vetor de

Ponteiros

Resumo

- Para incrementarmos um ponteiro fazemos:pont1++; //incrementa o local de memória para o próximo

- Para incrementarmos o valor que está em um ponteiro fazemos:(*pont1)++;

- Para imprimirmos o valor de um vetor como ponteiro fazemos:printf("%tipo", *(vetor+indice));

Page 88: Laboratório de Programação II - diemesleno.com.br · A forma geral para se declarar um vetor de ponteiros é: int *pmatrix[10]; No exemplo acima, estamos declarando um vetor de

Laboratório de Programação II

Aula 05 Prof. Diemesleno Souza [email protected]://www.diemesleno.com.br

Page 89: Laboratório de Programação II - diemesleno.com.br · A forma geral para se declarar um vetor de ponteiros é: int *pmatrix[10]; No exemplo acima, estamos declarando um vetor de

Exercícios 1

1) Crie um programa com 2 funções que tenham o mesmo comportamento das funções strlen() e strcat() da biblioteca string.h

OBS: Assim como fizemos o programa69.c onde tinha a função strcpy() que tem o mesmo comportamento da função strcpy() da biblioteca string.h