BCC 201 - Introdução à Programação I Ponteiros · 31/61 Rela˘c~ao entre ponteiros e vetoresI...

61
1/61 BCC 201 - Introdu¸ ao ` a Programa¸ ao I Ponteiros Guillermo C´ amara-Ch´ avez UFOP

Transcript of BCC 201 - Introdução à Programação I Ponteiros · 31/61 Rela˘c~ao entre ponteiros e vetoresI...

Page 1: BCC 201 - Introdução à Programação I Ponteiros · 31/61 Rela˘c~ao entre ponteiros e vetoresI I A aritm etica de ponteiros e particularmente importante para manipula˘c~ao de

1/61

BCC 201 - Introducao a Programacao I

Ponteiros

Guillermo Camara-ChavezUFOP

Page 2: BCC 201 - Introdução à Programação I Ponteiros · 31/61 Rela˘c~ao entre ponteiros e vetoresI I A aritm etica de ponteiros e particularmente importante para manipula˘c~ao de

2/61

Ponteiros ... I

i n t main ( ){

i n t x ;x = 10p r i n t f ("Conteudo de x: %d \n" , x ) ;p r i n t f ("Endereco de x: %p \n" , &x ) ;r e t u r n 0 ;

}

Page 3: BCC 201 - Introdução à Programação I Ponteiros · 31/61 Rela˘c~ao entre ponteiros e vetoresI I A aritm etica de ponteiros e particularmente importante para manipula˘c~ao de

3/61

Ponteiros ... II

Page 4: BCC 201 - Introdução à Programação I Ponteiros · 31/61 Rela˘c~ao entre ponteiros e vetoresI I A aritm etica de ponteiros e particularmente importante para manipula˘c~ao de

4/61

Ponteiros ... III

Page 5: BCC 201 - Introdução à Programação I Ponteiros · 31/61 Rela˘c~ao entre ponteiros e vetoresI I A aritm etica de ponteiros e particularmente importante para manipula˘c~ao de

5/61

Ponteiros ... IV

Page 6: BCC 201 - Introdução à Programação I Ponteiros · 31/61 Rela˘c~ao entre ponteiros e vetoresI I A aritm etica de ponteiros e particularmente importante para manipula˘c~ao de

6/61

Ponteiros ... V

Page 7: BCC 201 - Introdução à Programação I Ponteiros · 31/61 Rela˘c~ao entre ponteiros e vetoresI I A aritm etica de ponteiros e particularmente importante para manipula˘c~ao de

7/61

Ponteiros ... VI

Page 8: BCC 201 - Introdução à Programação I Ponteiros · 31/61 Rela˘c~ao entre ponteiros e vetoresI I A aritm etica de ponteiros e particularmente importante para manipula˘c~ao de

8/61

Ponteiros ... VII

Page 9: BCC 201 - Introdução à Programação I Ponteiros · 31/61 Rela˘c~ao entre ponteiros e vetoresI I A aritm etica de ponteiros e particularmente importante para manipula˘c~ao de

9/61

Ponteiros ... VIII

Page 10: BCC 201 - Introdução à Programação I Ponteiros · 31/61 Rela˘c~ao entre ponteiros e vetoresI I A aritm etica de ponteiros e particularmente importante para manipula˘c~ao de

10/61

Ponteiros ... IX

Page 11: BCC 201 - Introdução à Programação I Ponteiros · 31/61 Rela˘c~ao entre ponteiros e vetoresI I A aritm etica de ponteiros e particularmente importante para manipula˘c~ao de

11/61

Ponteiros ... X

Page 12: BCC 201 - Introdução à Programação I Ponteiros · 31/61 Rela˘c~ao entre ponteiros e vetoresI I A aritm etica de ponteiros e particularmente importante para manipula˘c~ao de

12/61

Ponteiros ... XI

Page 13: BCC 201 - Introdução à Programação I Ponteiros · 31/61 Rela˘c~ao entre ponteiros e vetoresI I A aritm etica de ponteiros e particularmente importante para manipula˘c~ao de

13/61

Ponteiros ... XII

Page 14: BCC 201 - Introdução à Programação I Ponteiros · 31/61 Rela˘c~ao entre ponteiros e vetoresI I A aritm etica de ponteiros e particularmente importante para manipula˘c~ao de

14/61

Ponteiros ... XIII

Page 15: BCC 201 - Introdução à Programação I Ponteiros · 31/61 Rela˘c~ao entre ponteiros e vetoresI I A aritm etica de ponteiros e particularmente importante para manipula˘c~ao de

15/61

Ponteiros ... XIV

Page 16: BCC 201 - Introdução à Programação I Ponteiros · 31/61 Rela˘c~ao entre ponteiros e vetoresI I A aritm etica de ponteiros e particularmente importante para manipula˘c~ao de

16/61

Ponteiros ... XV

Page 17: BCC 201 - Introdução à Programação I Ponteiros · 31/61 Rela˘c~ao entre ponteiros e vetoresI I A aritm etica de ponteiros e particularmente importante para manipula˘c~ao de

17/61

Ponteiros ... XVI

Page 18: BCC 201 - Introdução à Programação I Ponteiros · 31/61 Rela˘c~ao entre ponteiros e vetoresI I A aritm etica de ponteiros e particularmente importante para manipula˘c~ao de

18/61

Ponteiros ... XVII

Page 19: BCC 201 - Introdução à Programação I Ponteiros · 31/61 Rela˘c~ao entre ponteiros e vetoresI I A aritm etica de ponteiros e particularmente importante para manipula˘c~ao de

19/61

Ponteiros ... XVIII

Page 20: BCC 201 - Introdução à Programação I Ponteiros · 31/61 Rela˘c~ao entre ponteiros e vetoresI I A aritm etica de ponteiros e particularmente importante para manipula˘c~ao de

20/61

Aritmetica de Ponteiros I

I Uma variavel do tipo ponteiro esta sempre associada a umtipo

I Um ponteiro para um dado tipo t endereca o numero de bytesque esse tipo t ocupa na memoria, i.e., endereca sizeof(t)bytes.

I Se um ponteiro para uma variavel do tipo t for incrementadaatraves do operador ++, automaticamente este ponteiropassara a ter o valor x + sizeof(t)

Page 21: BCC 201 - Introdução à Programação I Ponteiros · 31/61 Rela˘c~ao entre ponteiros e vetoresI I A aritm etica de ponteiros e particularmente importante para manipula˘c~ao de

21/61

Aritmetica de Ponteiros II

Page 22: BCC 201 - Introdução à Programação I Ponteiros · 31/61 Rela˘c~ao entre ponteiros e vetoresI I A aritm etica de ponteiros e particularmente importante para manipula˘c~ao de

22/61

Aritmetica de Ponteiros III

Page 23: BCC 201 - Introdução à Programação I Ponteiros · 31/61 Rela˘c~ao entre ponteiros e vetoresI I A aritm etica de ponteiros e particularmente importante para manipula˘c~ao de

23/61

Aritmetica de Ponteiros IV

Page 24: BCC 201 - Introdução à Programação I Ponteiros · 31/61 Rela˘c~ao entre ponteiros e vetoresI I A aritm etica de ponteiros e particularmente importante para manipula˘c~ao de

24/61

Aritmetica de Ponteiros V

Page 25: BCC 201 - Introdução à Programação I Ponteiros · 31/61 Rela˘c~ao entre ponteiros e vetoresI I A aritm etica de ponteiros e particularmente importante para manipula˘c~ao de

25/61

Aritmetica de Ponteiros VI

Page 26: BCC 201 - Introdução à Programação I Ponteiros · 31/61 Rela˘c~ao entre ponteiros e vetoresI I A aritm etica de ponteiros e particularmente importante para manipula˘c~ao de

26/61

Aritmetica de Ponteiros VII

Page 27: BCC 201 - Introdução à Programação I Ponteiros · 31/61 Rela˘c~ao entre ponteiros e vetoresI I A aritm etica de ponteiros e particularmente importante para manipula˘c~ao de

27/61

Aritmetica de Ponteiros VIII

Page 28: BCC 201 - Introdução à Programação I Ponteiros · 31/61 Rela˘c~ao entre ponteiros e vetoresI I A aritm etica de ponteiros e particularmente importante para manipula˘c~ao de

28/61

Aritmetica de Ponteiros IX

Page 29: BCC 201 - Introdução à Programação I Ponteiros · 31/61 Rela˘c~ao entre ponteiros e vetoresI I A aritm etica de ponteiros e particularmente importante para manipula˘c~ao de

29/61

Aritmetica de Ponteiros X

Page 30: BCC 201 - Introdução à Programação I Ponteiros · 31/61 Rela˘c~ao entre ponteiros e vetoresI I A aritm etica de ponteiros e particularmente importante para manipula˘c~ao de

30/61

Aritmetica de Ponteiros XI

Page 31: BCC 201 - Introdução à Programação I Ponteiros · 31/61 Rela˘c~ao entre ponteiros e vetoresI I A aritm etica de ponteiros e particularmente importante para manipula˘c~ao de

31/61

Relacao entre ponteiros e vetores I

I A aritmetica de ponteiros e particularmente importante paramanipulacao de vetores e strings.

I Quando declaramos um vetor seus elementos sao alocados emespacos de memoria vizinhos.

I O nome de um vetor equivale ao endereco do primeiroelemento dele (se um vetor possui nome v , entao, v equivalea v [0].

Page 32: BCC 201 - Introdução à Programação I Ponteiros · 31/61 Rela˘c~ao entre ponteiros e vetoresI I A aritm etica de ponteiros e particularmente importante para manipula˘c~ao de

32/61

Relacao entre ponteiros e vetores II

Page 33: BCC 201 - Introdução à Programação I Ponteiros · 31/61 Rela˘c~ao entre ponteiros e vetoresI I A aritm etica de ponteiros e particularmente importante para manipula˘c~ao de

33/61

Vetores I

Page 34: BCC 201 - Introdução à Programação I Ponteiros · 31/61 Rela˘c~ao entre ponteiros e vetoresI I A aritm etica de ponteiros e particularmente importante para manipula˘c~ao de

34/61

Alocacao Dinamica de Memoria I

Page 35: BCC 201 - Introdução à Programação I Ponteiros · 31/61 Rela˘c~ao entre ponteiros e vetoresI I A aritm etica de ponteiros e particularmente importante para manipula˘c~ao de

35/61

Alocacao Dinamica de Memoria II

Page 36: BCC 201 - Introdução à Programação I Ponteiros · 31/61 Rela˘c~ao entre ponteiros e vetoresI I A aritm etica de ponteiros e particularmente importante para manipula˘c~ao de

36/61

Alocacao Dinamica de Memoria III

Page 37: BCC 201 - Introdução à Programação I Ponteiros · 31/61 Rela˘c~ao entre ponteiros e vetoresI I A aritm etica de ponteiros e particularmente importante para manipula˘c~ao de

37/61

Alocacao Dinamica de Memoria IV

Page 38: BCC 201 - Introdução à Programação I Ponteiros · 31/61 Rela˘c~ao entre ponteiros e vetoresI I A aritm etica de ponteiros e particularmente importante para manipula˘c~ao de

38/61

Alocacao Dinamica de Memoria V

Comando Liberacao Memoria

AlocacaoEstati-ca deMemoria

i n t v [ 3 ] ;

Reserva 3 espacos de 4bytes em v

O propio programa ao serencerrado, se encarregade liberar a memoria alo-cada.

AlocacaoDinamicadeMemoria

v = ( i n t ∗) m a l l o c( n∗ s i z e o f ( i n t ) ) ;

Reserva n espacos de 4bytes em v

Se nao for usar mais avariavel v , entao, e ne-cessario empregar o co-mando free().

Page 39: BCC 201 - Introdução à Programação I Ponteiros · 31/61 Rela˘c~ao entre ponteiros e vetoresI I A aritm etica de ponteiros e particularmente importante para manipula˘c~ao de

39/61

Relacao entre ponteiros, vetores e matrizes I

I Assim como e possıvel alocar memoria em tempo de execucaopara armazenar um vetor, tambem, e possıvel construir umamatriz M com m linhas e n colunas. Os comandos para taltarefa sao como dados a seguir:

i n t main ( ){

c h a r ∗∗M,i n t m, n , i ;p r i n t f ("Entre com m e n" ) ;s c a n f (" %d %d" , &m, &n ) ;// Vetor de enderecos (os elementos sao do tipo char*)M = ( c h a r ∗∗) c a l l o c (m, s i z e o f ( c h a r ∗ ) ) ;// Cria para cada endereco um vetor de elementos intf o r ( i = 0 ; i < m; i ++)

M[ i ] = ( c h a r ∗) c a l l o c ( n , s i z e o f ( c h a r ) )r e t u r n 0 ;

}

Page 40: BCC 201 - Introdução à Programação I Ponteiros · 31/61 Rela˘c~ao entre ponteiros e vetoresI I A aritm etica de ponteiros e particularmente importante para manipula˘c~ao de

40/61

Relacao entre ponteiros, vetores e matrizes II

I Vejamos um exemplo:

M = ( c h a r ∗∗) c a l l o c ( 3 , s i z e o f ( c h a r ∗ ) ) ;

Page 41: BCC 201 - Introdução à Programação I Ponteiros · 31/61 Rela˘c~ao entre ponteiros e vetoresI I A aritm etica de ponteiros e particularmente importante para manipula˘c~ao de

41/61

Relacao entre ponteiros, vetores e matrizes III

Page 42: BCC 201 - Introdução à Programação I Ponteiros · 31/61 Rela˘c~ao entre ponteiros e vetoresI I A aritm etica de ponteiros e particularmente importante para manipula˘c~ao de

42/61

Relacao entre ponteiros, vetores e matrizes IV

Page 43: BCC 201 - Introdução à Programação I Ponteiros · 31/61 Rela˘c~ao entre ponteiros e vetoresI I A aritm etica de ponteiros e particularmente importante para manipula˘c~ao de

43/61

Relacao entre ponteiros, vetores e matrizes V

Page 44: BCC 201 - Introdução à Programação I Ponteiros · 31/61 Rela˘c~ao entre ponteiros e vetoresI I A aritm etica de ponteiros e particularmente importante para manipula˘c~ao de

44/61

Relacao entre ponteiros, vetores e matrizes VI

Page 45: BCC 201 - Introdução à Programação I Ponteiros · 31/61 Rela˘c~ao entre ponteiros e vetoresI I A aritm etica de ponteiros e particularmente importante para manipula˘c~ao de

45/61

Liberacao de memoria I

Page 46: BCC 201 - Introdução à Programação I Ponteiros · 31/61 Rela˘c~ao entre ponteiros e vetoresI I A aritm etica de ponteiros e particularmente importante para manipula˘c~ao de

46/61

Liberacao de memoria II

Page 47: BCC 201 - Introdução à Programação I Ponteiros · 31/61 Rela˘c~ao entre ponteiros e vetoresI I A aritm etica de ponteiros e particularmente importante para manipula˘c~ao de

47/61

Liberacao de memoria III

Page 48: BCC 201 - Introdução à Programação I Ponteiros · 31/61 Rela˘c~ao entre ponteiros e vetoresI I A aritm etica de ponteiros e particularmente importante para manipula˘c~ao de

48/61

Liberacao de memoria IV

Page 49: BCC 201 - Introdução à Programação I Ponteiros · 31/61 Rela˘c~ao entre ponteiros e vetoresI I A aritm etica de ponteiros e particularmente importante para manipula˘c~ao de

49/61

Exercicios I

Inserir n notas de um total de m alunos

Page 50: BCC 201 - Introdução à Programação I Ponteiros · 31/61 Rela˘c~ao entre ponteiros e vetoresI I A aritm etica de ponteiros e particularmente importante para manipula˘c~ao de

50/61

Exercicios II#i n c l u d e <s t d i o . h>#i n c l u d e < s t d l i b . h>i n t main ( ){ i n t i , j , m, n ; f l o a t ∗∗M = NULL ;

p r i n t f ("Entre com m e n: " ) ;s c a n f (" %d %d" , &m, &n ) ;// Aloca m espacos tipo float *.M = ( f l o a t ∗∗) c a l l o c (m, s i z e o f ( f l o a t ∗ ) ) ;// Aloca n espacos tipo float, cada M[i].f o r ( i = 0 ; i < m; i ++)

M[ i ] = ( f l o a t ∗) c a l l o c ( n , s i z e o f ( f l o a t ) ) ;// Preenchendo a matriz M usando ındices: M[i][j].f o r ( i =0; i < m; i ++){ p r i n t f ("Aluno %d: " , i +1);

f o r ( j =0; j < n ; j ++){ p r i n t f (" Nota %d:" , j +1);

s c a n f (" %f" , &M[ i ] [ j ] ) ;}

}. . .

}

Page 51: BCC 201 - Introdução à Programação I Ponteiros · 31/61 Rela˘c~ao entre ponteiros e vetoresI I A aritm etica de ponteiros e particularmente importante para manipula˘c~ao de

51/61

Exercicios III

. . .// Impressao dos elementos de M, empregando ponteiros.f o r ( i =0; i < m; i ++){ f o r ( j =0; j < n ; j ++)

p r i n t f (" [ %4f] " , M[ i ] [ j ] ) ;p r i n t f (" \n " ) ;

}// Liberacao de memoria.// Liberando m vetores de tamanho n.i f (M != NULL){

f o r ( i =0; i < m; i ++)i f (M[ i ] != NULL) f r e e (M[ i ] ) ;

// Liberando o vetor de ponteiros// de tamanho m.f r e e (M) ;

}r e t u r n 0 ;

}

Page 52: BCC 201 - Introdução à Programação I Ponteiros · 31/61 Rela˘c~ao entre ponteiros e vetoresI I A aritm etica de ponteiros e particularmente importante para manipula˘c~ao de

52/61

Ponteiros: Passagem por valor e por referencia I

Implementar uma funcao que encontre o maior de dois numeros

Page 53: BCC 201 - Introdução à Programação I Ponteiros · 31/61 Rela˘c~ao entre ponteiros e vetoresI I A aritm etica de ponteiros e particularmente importante para manipula˘c~ao de

53/61

Ponteiros: Passagem por valor e por referencia II

Page 54: BCC 201 - Introdução à Programação I Ponteiros · 31/61 Rela˘c~ao entre ponteiros e vetoresI I A aritm etica de ponteiros e particularmente importante para manipula˘c~ao de

54/61

Ponteiros: Passagem por valor e por referencia III

Page 55: BCC 201 - Introdução à Programação I Ponteiros · 31/61 Rela˘c~ao entre ponteiros e vetoresI I A aritm etica de ponteiros e particularmente importante para manipula˘c~ao de

55/61

Ponteiros: Passagem por valor e por referencia IV

Page 56: BCC 201 - Introdução à Programação I Ponteiros · 31/61 Rela˘c~ao entre ponteiros e vetoresI I A aritm etica de ponteiros e particularmente importante para manipula˘c~ao de

56/61

Ponteiros: Passagem por valor e por referencia V

Criar uma estrutura empregrado com os seguintes campos:

I nome

I salario

I sexo

Inserir n empregados (criar um vetor dinamico)

Page 57: BCC 201 - Introdução à Programação I Ponteiros · 31/61 Rela˘c~ao entre ponteiros e vetoresI I A aritm etica de ponteiros e particularmente importante para manipula˘c~ao de

57/61

Ponteiros: Passagem por valor e por referencia VI

t y p e d e f s t r u c t Pessoa{

c h a r nome [ 1 0 0 ] ;d o u b l e s a l a r i o ;c h a r s e x o ;

}PE ;

v o i d I n s e r e (PE∗ , i n t ) ;v o i d P r i n t (PE∗ , i n t ) ;i n t main ( ){

i n t n ;PE ∗ t r a b = NULL ;p r i n t f ("Quantidade de pessoas" ) ;s c a n f (" %d %*c" , &n ) ;t r a b = (PE∗) c a l l o c ( n , s i z e o f (PE ) ) ;I n s e r e ( t rab , n ) ;P r i n t ( t rab , n ) ;r e t u r n 0 ;

}

Page 58: BCC 201 - Introdução à Programação I Ponteiros · 31/61 Rela˘c~ao entre ponteiros e vetoresI I A aritm etica de ponteiros e particularmente importante para manipula˘c~ao de

58/61

Ponteiros: Passagem por valor e por referencia VII

v o i d I n s e r e (PE∗ vet , i n t n ){

i n t i , v a l o r e s ;f o r ( i = 0 ; i < n ; i ++){

p r i n t f ("Cadastro numero %d\n" , i +1);p r i n t f ("Insere nome: " ) ;f g e t s ( v e t [ i ] . nome , 100 , s t d i n ) ;do{

p r i n t f ("Insere salario: " ) ;v a l o r e s = s c a n f (" %lf" , &v e t [ i ] . s a l a r i o ) ;i f ( v a l o r e s == 0) s c a n f (" %*s" ) ;

}w h i l e ( v a l o r e s == 0 ) ;

p r i n t f ("Insere sexo: " ) ;s c a n f (" %c %*c" , &v e t [ i ] . s e x o ) ;//vet[i].sexo = getchar();

}}

Page 59: BCC 201 - Introdução à Programação I Ponteiros · 31/61 Rela˘c~ao entre ponteiros e vetoresI I A aritm etica de ponteiros e particularmente importante para manipula˘c~ao de

59/61

Ponteiros: Passagem por valor e por referencia VIII

v o i d P r i n t (PE∗ vet , i n t n ){

i n t i ;f o r ( i = 0 ; i < n ; i ++){

p r i n t f (" %s %lf %c \n" ,v e t [ i ] . nome , v e t [ i ] . s a l a r i o , v e t [ i ] . s e x o ) ;

}}

Page 60: BCC 201 - Introdução à Programação I Ponteiros · 31/61 Rela˘c~ao entre ponteiros e vetoresI I A aritm etica de ponteiros e particularmente importante para manipula˘c~ao de

60/61

Exercicios em Propostos I

1. Defina uma funcao que retorne a transposta de uma matriz xde dimensao lin × col .

i n t ∗∗ T r a n s p o s t a ( i n t ∗∗ M, i n t l i n , i n t c o l )

2. Elaborar um programa para calcular a meda aritmetica de doisvalores reais utilizando apenas variaveis do tipo ponteiro.

Page 61: BCC 201 - Introdução à Programação I Ponteiros · 31/61 Rela˘c~ao entre ponteiros e vetoresI I A aritm etica de ponteiros e particularmente importante para manipula˘c~ao de

61/61

FIM