Anda di halaman 1dari 76

Algoritmos e estrutura de dados

Aula 1: Revisão de Programação Computacional.


Universidade Federal do Triângulo Mineiro

Professor Me. Rooney R. A. Coelho


21 de Agosto de 2017
Roteiro da Apresentação

1 Vetores e matrizes - arrays


Arrays com uma dimensão - Vetor
Arrays com múltiplas dimensões - Matriz

2 Funções
Passagem de valores por referência
Arrays e funções

3 Ponteiros
Aritmética de Ponteiros
Ponteiro para ponteiro
Ponteiro para função
Próximo Tópico

1 Vetores e matrizes - arrays


Arrays com uma dimensão - Vetor
Arrays com múltiplas dimensões - Matriz

2 Funções
Passagem de valores por referência
Arrays e funções

3 Ponteiros
Aritmética de Ponteiros
Ponteiro para ponteiro
Ponteiro para função

Professor Me. Rooney R. A. Coelho (UFTM) Aula 1 21 de Agosto de 2017 3 / 43


Arrays com uma dimensão - Vetor

O que é?
Conjunto de variáveis de um mesmo tipo agrupado sequencialmente
na memória e acessado por um índice.

Professor Me. Rooney R. A. Coelho (UFTM) Aula 1 21 de Agosto de 2017 4 / 43


Arrays com uma dimensão - Vetor

O que é?
Conjunto de variáveis de um mesmo tipo agrupado sequencialmente
na memória e acessado por um índice.

• Conjunto de variáveis de um mesmo tipo;

Professor Me. Rooney R. A. Coelho (UFTM) Aula 1 21 de Agosto de 2017 4 / 43


Arrays com uma dimensão - Vetor

O que é?
Conjunto de variáveis de um mesmo tipo agrupado sequencialmente
na memória e acessado por um índice.

• Conjunto de variáveis de um mesmo tipo;


• Todas associadas ao mesmo nome e igualmente acessíveis por um
índice.

Professor Me. Rooney R. A. Coelho (UFTM) Aula 1 21 de Agosto de 2017 4 / 43


Arrays com uma dimensão - Vetor

O que é?
Conjunto de variáveis de um mesmo tipo agrupado sequencialmente
na memória e acessado por um índice.

• Conjunto de variáveis de um mesmo tipo;


• Todas associadas ao mesmo nome e igualmente acessíveis por um
índice.

tipo nome[tamanho];

Professor Me. Rooney R. A. Coelho (UFTM) Aula 1 21 de Agosto de 2017 4 / 43


Arrays com uma dimensão - Vetor

#include <stdio.h>
int main(){
int notas[100];
int i;
for (i=0; i<100; i++){
printf("Digite a nota do aluno %d: ",i);
scanf("%d",&notas[i]);
}
return 0;
}

Professor Me. Rooney R. A. Coelho (UFTM) Aula 1 21 de Agosto de 2017 5 / 43


Arrays com uma dimensão - Vetor

Todas as notas dos alunos estão agora armazenadas na mesma


estrutura de inteiros e são acessadas pelo índice.

notas[0] = 81; notas[1] = 55; ... notas[99] = 72;

Professor Me. Rooney R. A. Coelho (UFTM) Aula 1 21 de Agosto de 2017 6 / 43


Arrays com uma dimensão - Vetor

Todas as notas dos alunos estão agora armazenadas na mesma


estrutura de inteiros e são acessadas pelo índice.

notas[0] = 81; notas[1] = 55; ... notas[99] = 72;

• O uso de arrays permite usar comandos de repetição.

Professor Me. Rooney R. A. Coelho (UFTM) Aula 1 21 de Agosto de 2017 6 / 43


Arrays com uma dimensão - Vetor

Todas as notas dos alunos estão agora armazenadas na mesma


estrutura de inteiros e são acessadas pelo índice.

notas[0] = 81; notas[1] = 55; ... notas[99] = 72;

• O uso de arrays permite usar comandos de repetição.


• Um array é um agrupamento de dados do mesmo tipo, adjacentes
na memória.

Professor Me. Rooney R. A. Coelho (UFTM) Aula 1 21 de Agosto de 2017 6 / 43


Arrays com uma dimensão - Vetor
• Nome: indica onde esses dados começam na memória.

Professor Me. Rooney R. A. Coelho (UFTM) Aula 1 21 de Agosto de 2017 7 / 43


Arrays com uma dimensão - Vetor
• Nome: indica onde esses dados começam na memória.
• Índice: quantas posições se deve pular para acessar determinada
posição.

Professor Me. Rooney R. A. Coelho (UFTM) Aula 1 21 de Agosto de 2017 7 / 43


Arrays com uma dimensão - Vetor
• Nome: indica onde esses dados começam na memória.
• Índice: quantas posições se deve pular para acessar determinada
posição.

Figura : Relação entre o array e a memória.


Professor Me. Rooney R. A. Coelho (UFTM) Aula 1 21 de Agosto de 2017 7 / 43
Arrays com uma dimensão - Vetor

Cuidado!
É função do programador garantir que os limites do array estejam
sendo respeitados.

Professor Me. Rooney R. A. Coelho (UFTM) Aula 1 21 de Agosto de 2017 8 / 43


Arrays com uma dimensão - Vetor

Cuidado!
É função do programador garantir que os limites do array estejam
sendo respeitados.

Cuidado!
Não se pode fazer atribuição de arrays inteiros, apenas de suas posições
individualmente!

Professor Me. Rooney R. A. Coelho (UFTM) Aula 1 21 de Agosto de 2017 8 / 43


Arrays com uma dimensão - Vetor

Cuidado!
É função do programador garantir que os limites do array estejam
sendo respeitados.

Cuidado!
Não se pode fazer atribuição de arrays inteiros, apenas de suas posições
individualmente!

Boa prática
Para atribuir o conteúdo de um array a outro array, o correto é copiar
seus valores elemento por elemento para o outro array.

Professor Me. Rooney R. A. Coelho (UFTM) Aula 1 21 de Agosto de 2017 8 / 43


Próximo Tópico

1 Vetores e matrizes - arrays


Arrays com uma dimensão - Vetor
Arrays com múltiplas dimensões - Matriz

2 Funções
Passagem de valores por referência
Arrays e funções

3 Ponteiros
Aritmética de Ponteiros
Ponteiro para ponteiro
Ponteiro para função

Professor Me. Rooney R. A. Coelho (UFTM) Aula 1 21 de Agosto de 2017 9 / 43


Arrays com múltiplas dimensões

Há casos em que uma estrutura com mais de uma dimensão é mais útil.

Professor Me. Rooney R. A. Coelho (UFTM) Aula 1 21 de Agosto de 2017 10 / 43


Arrays com múltiplas dimensões

Há casos em que uma estrutura com mais de uma dimensão é mais útil.

• Exemplo: Quando os dados são organizados em uma estrutura de


linhas e colunas, como uma tabela.

Professor Me. Rooney R. A. Coelho (UFTM) Aula 1 21 de Agosto de 2017 10 / 43


Arrays com múltiplas dimensões

Há casos em que uma estrutura com mais de uma dimensão é mais útil.

• Exemplo: Quando os dados são organizados em uma estrutura de


linhas e colunas, como uma tabela.
• Para isso, usamos um array com duas dimensões, ou seja, uma
“matriz”.

Professor Me. Rooney R. A. Coelho (UFTM) Aula 1 21 de Agosto de 2017 10 / 43


Arrays com múltiplas dimensões

Há casos em que uma estrutura com mais de uma dimensão é mais útil.

• Exemplo: Quando os dados são organizados em uma estrutura de


linhas e colunas, como uma tabela.
• Para isso, usamos um array com duas dimensões, ou seja, uma
“matriz”.

tipo nome[linhas][colunas];

Professor Me. Rooney R. A. Coelho (UFTM) Aula 1 21 de Agosto de 2017 10 / 43


Arrays com múltiplas dimensões

#include <stdio.h>
int main(){
int mat[100][50];
int i,j;
for (i = 0; i < 100; i++){
for (j = 0; j < 50; j++){
printf("Digite mat[%d][%d]: ",i,j);
scanf("%d",&mat[i][j]);
}
}
return 0;
}

Professor Me. Rooney R. A. Coelho (UFTM) Aula 1 21 de Agosto de 2017 11 / 43


Funções

O que é?
Sequência de comandos que recebe um nome e pode ser chamada de
qualquer parte do programa, quantas vezes forem necessárias, durante
a sua execução.

Duas são as principais razões para o uso de funções:

Professor Me. Rooney R. A. Coelho (UFTM) Aula 1 21 de Agosto de 2017 12 / 43


Funções

O que é?
Sequência de comandos que recebe um nome e pode ser chamada de
qualquer parte do programa, quantas vezes forem necessárias, durante
a sua execução.

Duas são as principais razões para o uso de funções:


• Estruturação dos programas.

Professor Me. Rooney R. A. Coelho (UFTM) Aula 1 21 de Agosto de 2017 12 / 43


Funções

O que é?
Sequência de comandos que recebe um nome e pode ser chamada de
qualquer parte do programa, quantas vezes forem necessárias, durante
a sua execução.

Duas são as principais razões para o uso de funções:


• Estruturação dos programas.
• Reutilização de código.

Professor Me. Rooney R. A. Coelho (UFTM) Aula 1 21 de Agosto de 2017 12 / 43


Funções

tipoRetornado nomeDaFunção( lista de parâmetros ){


sequência de declarações e comandos;
}

Professor Me. Rooney R. A. Coelho (UFTM) Aula 1 21 de Agosto de 2017 13 / 43


Funções

#include <stdio.h>
int Square (int a){
return (a*a);
}
int main(){
int n1,n2;
printf("Entre com um numero: ");
scanf("%d", &n1);
n2 = Square(n1);
printf("O seu quadrado vale: %d\n", n2);
return 0;
}

Professor Me. Rooney R. A. Coelho (UFTM) Aula 1 21 de Agosto de 2017 14 / 43


Funções

#include <stdio.h>
//protótipo da função
int Square (int a);

int main(){
int n1,n2;
printf("Entre com um numero: ");
scanf("%d", &n1);
n2 = Square(n1);
printf("O seu quadrado vale: %d\n", n2);
return 0;
}
int Square (int a){
return (a*a);
}

Professor Me. Rooney R. A. Coelho (UFTM) Aula 1 21 de Agosto de 2017 15 / 43


Funções

1 O código do programa é executado até encontrar uma chamada de


função.

Professor Me. Rooney R. A. Coelho (UFTM) Aula 1 21 de Agosto de 2017 16 / 43


Funções

1 O código do programa é executado até encontrar uma chamada de


função.
2 O programa é então interrompido temporariamente e o fluxo do
programa passa para a função chamada.

Professor Me. Rooney R. A. Coelho (UFTM) Aula 1 21 de Agosto de 2017 16 / 43


Funções

1 O código do programa é executado até encontrar uma chamada de


função.
2 O programa é então interrompido temporariamente e o fluxo do
programa passa para a função chamada.
3 Os valores da chamada da função são copiados para os
parâmetros no código da função.

Professor Me. Rooney R. A. Coelho (UFTM) Aula 1 21 de Agosto de 2017 16 / 43


Funções

1 O código do programa é executado até encontrar uma chamada de


função.
2 O programa é então interrompido temporariamente e o fluxo do
programa passa para a função chamada.
3 Os valores da chamada da função são copiados para os
parâmetros no código da função.
4 Os comandos da função são executados.

Professor Me. Rooney R. A. Coelho (UFTM) Aula 1 21 de Agosto de 2017 16 / 43


Funções

1 O código do programa é executado até encontrar uma chamada de


função.
2 O programa é então interrompido temporariamente e o fluxo do
programa passa para a função chamada.
3 Os valores da chamada da função são copiados para os
parâmetros no código da função.
4 Os comandos da função são executados.
5 Quando a função termina (seus comandos acabaram ou o
comando return foi encontrado), o programa volta ao ponto em
que foi interrompido para continuar sua execução normal.

Professor Me. Rooney R. A. Coelho (UFTM) Aula 1 21 de Agosto de 2017 16 / 43


Funções

Cuidado!
int x, y é errado! 7
int x, int y é correto! 3

Professor Me. Rooney R. A. Coelho (UFTM) Aula 1 21 de Agosto de 2017 17 / 43


Funções

Cuidado!
int x, y é errado! 7
int x, int y é correto! 3

Cuidado!
O valor retornado por uma função não pode ser um array, a linguagem
C não suporta a atribuição de um array para outro.

Professor Me. Rooney R. A. Coelho (UFTM) Aula 1 21 de Agosto de 2017 17 / 43


Funções

Cuidado!
int x, y é errado! 7
int x, int y é correto! 3

Cuidado!
O valor retornado por uma função não pode ser um array, a linguagem
C não suporta a atribuição de um array para outro.

Boa prática
Uma função é construída com o intuito de realizar uma tarefa
específica e bem definida.

Professor Me. Rooney R. A. Coelho (UFTM) Aula 1 21 de Agosto de 2017 17 / 43


Próximo Tópico

1 Vetores e matrizes - arrays


Arrays com uma dimensão - Vetor
Arrays com múltiplas dimensões - Matriz

2 Funções
Passagem de valores por referência
Arrays e funções

3 Ponteiros
Aritmética de Ponteiros
Ponteiro para ponteiro
Ponteiro para função

Professor Me. Rooney R. A. Coelho (UFTM) Aula 1 21 de Agosto de 2017 18 / 43


Passagem de valores por referência

void soma_mais_um( int n ){


n = n + 1;
}

Professor Me. Rooney R. A. Coelho (UFTM) Aula 1 21 de Agosto de 2017 19 / 43


Passagem de valores por referência

void soma_mais_um( int n ){


n = n + 1;
}

void soma_mais_um( int *n ){


*n = *n + 1;
}

soma_mais_um( &x ); // Na chamada da função

Professor Me. Rooney R. A. Coelho (UFTM) Aula 1 21 de Agosto de 2017 19 / 43


Próximo Tópico

1 Vetores e matrizes - arrays


Arrays com uma dimensão - Vetor
Arrays com múltiplas dimensões - Matriz

2 Funções
Passagem de valores por referência
Arrays e funções

3 Ponteiros
Aritmética de Ponteiros
Ponteiro para ponteiro
Ponteiro para função

Professor Me. Rooney R. A. Coelho (UFTM) Aula 1 21 de Agosto de 2017 20 / 43


Arrays e funções

void imprime (int *m, int n);


void imprime (int m[], int n);
void imprime (int m[5], int n); // Desnecessária

Professor Me. Rooney R. A. Coelho (UFTM) Aula 1 21 de Agosto de 2017 21 / 43


Arrays e funções

void imprime (int *m, int n);


void imprime (int m[], int n);
void imprime (int m[5], int n); // Desnecessária

void imprime (int *m, int n){


int i;
for (i=0; i<n;i++)
printf("%d \n", m[i]); // não precisa usar *m
}
int main(){
int v[] = {1,2,3,4,5};
imprime(v,5); //não precisa usar &v
return 0;
}

Professor Me. Rooney R. A. Coelho (UFTM) Aula 1 21 de Agosto de 2017 21 / 43


Curiosidade

void imprime2(int *A, int m, int n){ // perde a


,→ notação de matriz
int i,j;
for( i=0; i<m; i++ ){
for( j=0; j<n; j++ ){
printf("%d\t", A[n*i+j]);// A[n*i+j] =
,→ A[i][j]
}
printf("\n"); // \n: quebra de linha
}
}

imprime2( A, m , n ); // Chamada da função

Professor Me. Rooney R. A. Coelho (UFTM) Aula 1 21 de Agosto de 2017 22 / 43


Ponteiros

O que é?
Ponteiros são um tipo especial de variáveis que permitem armazenar
endereços de memória em vez de dados numéricos ou caracteres.

Professor Me. Rooney R. A. Coelho (UFTM) Aula 1 21 de Agosto de 2017 23 / 43


Ponteiros

O que é?
Ponteiros são um tipo especial de variáveis que permitem armazenar
endereços de memória em vez de dados numéricos ou caracteres.

Duas são as principais razões para o uso de funções:


• As variáveis o computador associa o endereço do espaço que ele
reservou na memória para guardá-la.

Professor Me. Rooney R. A. Coelho (UFTM) Aula 1 21 de Agosto de 2017 23 / 43


Ponteiros

O que é?
Ponteiros são um tipo especial de variáveis que permitem armazenar
endereços de memória em vez de dados numéricos ou caracteres.

Duas são as principais razões para o uso de funções:


• As variáveis o computador associa o endereço do espaço que ele
reservou na memória para guardá-la.
• Ao computador não interessa o nome das variáveis, mas sim seus
endereços.

Professor Me. Rooney R. A. Coelho (UFTM) Aula 1 21 de Agosto de 2017 23 / 43


Ponteiros

tipoDoPonteiro *nomeDoPonteiro

Professor Me. Rooney R. A. Coelho (UFTM) Aula 1 21 de Agosto de 2017 24 / 43


Ponteiros

tipoDoPonteiro *nomeDoPonteiro

(*) informa ao compilador que aquela variável não vai guardar um


valor, mas um endereço de memória para aquele tipo especificado.

Professor Me. Rooney R. A. Coelho (UFTM) Aula 1 21 de Agosto de 2017 24 / 43


Ponteiros

tipoDoPonteiro *nomeDoPonteiro

(*) informa ao compilador que aquela variável não vai guardar um


valor, mas um endereço de memória para aquele tipo especificado.

(&) operador de endereçamento, utilizado para a inicialização do


ponteiro.

Professor Me. Rooney R. A. Coelho (UFTM) Aula 1 21 de Agosto de 2017 24 / 43


Aponta para um local indefinido.

Professor Me. Rooney R. A. Coelho (UFTM) Aula 1 21 de Agosto de 2017 25 / 43


Aponta para NULL

• A constante NULL está definida na biblioteca stdlib.h.


• Posição de memória inexistente.

Professor Me. Rooney R. A. Coelho (UFTM) Aula 1 21 de Agosto de 2017 26 / 43


Aponta para count

Professor Me. Rooney R. A. Coelho (UFTM) Aula 1 21 de Agosto de 2017 27 / 43


Ponteiros

#include <stdio.h>
int main(){
//Declara uma variável int contendo o valor 10
int count = 10;
//Declara um ponteiro para int
int *p;
//Atribui ao ponteiro o endereço da variável int
p = &count;
printf("Conteudo apontado por p: %d \n",*p);
//Atribui um novo valor à posição de memória
,→ apontada por p
*p = 12;
printf("Conteudo apontado por p: %d \n",*p);
printf("Conteudo de count: %d \n",count);
return 0;
}

Professor Me. Rooney R. A. Coelho (UFTM) Aula 1 21 de Agosto de 2017 28 / 43


Ponteiros

Operador * vs. operador &


* Declara um ponteiro: int *x;
* Conteúdo para onde o ponteiro aponta: int y = *x;
& Endereço onde uma variável está guardada na memória: &y

Professor Me. Rooney R. A. Coelho (UFTM) Aula 1 21 de Agosto de 2017 29 / 43


Ponteiros

Cuidado!
Em geral um ponteiro só pode receber o endereço de memória de uma
variável do mesmo tipo do ponteiro. Porém, o compilador não
acusará nenhum erro!

Professor Me. Rooney R. A. Coelho (UFTM) Aula 1 21 de Agosto de 2017 30 / 43


Ponteiros

Cuidado!
Em geral um ponteiro só pode receber o endereço de memória de uma
variável do mesmo tipo do ponteiro. Porém, o compilador não
acusará nenhum erro!

Boa prática
Ponteiros genéricos, do tipo void, devem ser sempre usados com
typecast.

Professor Me. Rooney R. A. Coelho (UFTM) Aula 1 21 de Agosto de 2017 30 / 43


Ponteiros

Cuidado!
Em geral um ponteiro só pode receber o endereço de memória de uma
variável do mesmo tipo do ponteiro. Porém, o compilador não
acusará nenhum erro!

Boa prática
Ponteiros genéricos, do tipo void, devem ser sempre usados com
typecast.

Cuidado!
Evite apontar para um tipo de dado diferente do tipo declarado para o
ponteiro, evitando assim erros na interpretação do conteúdo da variável
apontada.

Professor Me. Rooney R. A. Coelho (UFTM) Aula 1 21 de Agosto de 2017 30 / 43


Próximo Tópico

1 Vetores e matrizes - arrays


Arrays com uma dimensão - Vetor
Arrays com múltiplas dimensões - Matriz

2 Funções
Passagem de valores por referência
Arrays e funções

3 Ponteiros
Aritmética de Ponteiros
Ponteiro para ponteiro
Ponteiro para função

Professor Me. Rooney R. A. Coelho (UFTM) Aula 1 21 de Agosto de 2017 31 / 43


Aritmética de Ponteiros

#include <stdio.h>
int main(){
int *p = 0x5DC;
printf("p = Hexadecimal: %p Decimal: %d \n",p,p);
//Incrementa p em uma posição
p++;
printf("p = Hexadecimal: %p Decimal: %d \n",p,p);
//Incrementa p em 15 posições
p = p + 15;
printf("p = Hexadecimal: %p Decimal: %d \n",p,p);
//Decrementa p em 2 posições
p = p - 2;
printf("p = Hexadecimal: %p Decimal: %d \n",p,p);
return 0;
}

Professor Me. Rooney R. A. Coelho (UFTM) Aula 1 21 de Agosto de 2017 32 / 43


Aritmética de Ponteiros

p = Hexadecimal: 000005DC Decimal: 1500


p = Hexadecimal: 000005E0 Decimal: 1504
p = Hexadecimal: 0000061C Decimal: 1564
p = Hexadecimal: 00000614 Decimal: 1556

Professor Me. Rooney R. A. Coelho (UFTM) Aula 1 21 de Agosto de 2017 33 / 43


Próximo Tópico

1 Vetores e matrizes - arrays


Arrays com uma dimensão - Vetor
Arrays com múltiplas dimensões - Matriz

2 Funções
Passagem de valores por referência
Arrays e funções

3 Ponteiros
Aritmética de Ponteiros
Ponteiro para ponteiro
Ponteiro para função

Professor Me. Rooney R. A. Coelho (UFTM) Aula 1 21 de Agosto de 2017 34 / 43


Ponteiro para ponteiro

O que é?
Ponteiros também ocupam um espaço na memória do computador e
possuem o endereço desse espaço de memória associado ao seu nome.
É possível criar um ponteiro que aponte para o endereço de outro
ponteiro.

Professor Me. Rooney R. A. Coelho (UFTM) Aula 1 21 de Agosto de 2017 35 / 43


Ponteiro para ponteiro

O que é?
Ponteiros também ocupam um espaço na memória do computador e
possuem o endereço desse espaço de memória associado ao seu nome.
É possível criar um ponteiro que aponte para o endereço de outro
ponteiro.

Forma geral:
tipoDoPonteiro **nomeDoPonteiro;

Professor Me. Rooney R. A. Coelho (UFTM) Aula 1 21 de Agosto de 2017 35 / 43


Ponteiro para ponteiro

#include <stdio.h>
int main(){
int x = 10;
int *p = &x;
int **p2 = &p;
//Endereço em p2
printf("Endereco em p2: %p\n",p2);
//Conteudo do endereço
printf("Conteudo em *p2: %p\n",*p2);
//Conteudo do endereço do endereço
printf("Conteudo em **p2: %d\n",**p2);
return 0;
}

Professor Me. Rooney R. A. Coelho (UFTM) Aula 1 21 de Agosto de 2017 36 / 43


Ponteiro para ponteiro

Figura : p2 aponta para o endereço de p1, que aponta para o endereço de um


inteiro x.

Professor Me. Rooney R. A. Coelho (UFTM) Aula 1 21 de Agosto de 2017 37 / 43


Próximo Tópico

1 Vetores e matrizes - arrays


Arrays com uma dimensão - Vetor
Arrays com múltiplas dimensões - Matriz

2 Funções
Passagem de valores por referência
Arrays e funções

3 Ponteiros
Aritmética de Ponteiros
Ponteiro para ponteiro
Ponteiro para função

Professor Me. Rooney R. A. Coelho (UFTM) Aula 1 21 de Agosto de 2017 38 / 43


Ponteiro para função
O que é?
Uma função também é um conjunto de instruções armazenadas na
memória. Podemos acessar uma função por meio de um ponteiro que
aponte para onde a função está na memória.

Professor Me. Rooney R. A. Coelho (UFTM) Aula 1 21 de Agosto de 2017 39 / 43


Ponteiro para função
O que é?
Uma função também é um conjunto de instruções armazenadas na
memória. Podemos acessar uma função por meio de um ponteiro que
aponte para onde a função está na memória.

Boa prática
construção de códigos genéricos.

Professor Me. Rooney R. A. Coelho (UFTM) Aula 1 21 de Agosto de 2017 39 / 43


Ponteiro para função
O que é?
Uma função também é um conjunto de instruções armazenadas na
memória. Podemos acessar uma função por meio de um ponteiro que
aponte para onde a função está na memória.

Boa prática
construção de códigos genéricos.

• Ponteiros permitem fazer uma chamada indireta à função e


passá-la como parâmetro para outras funções.

Professor Me. Rooney R. A. Coelho (UFTM) Aula 1 21 de Agosto de 2017 39 / 43


Ponteiro para função
O que é?
Uma função também é um conjunto de instruções armazenadas na
memória. Podemos acessar uma função por meio de um ponteiro que
aponte para onde a função está na memória.

Boa prática
construção de códigos genéricos.

• Ponteiros permitem fazer uma chamada indireta à função e


passá-la como parâmetro para outras funções.
• Um ponteiro para funções só pode apontar para funções que
possuam o mesmo protótipo.

Professor Me. Rooney R. A. Coelho (UFTM) Aula 1 21 de Agosto de 2017 39 / 43


Ponteiro para função
O que é?
Uma função também é um conjunto de instruções armazenadas na
memória. Podemos acessar uma função por meio de um ponteiro que
aponte para onde a função está na memória.

Boa prática
construção de códigos genéricos.

• Ponteiros permitem fazer uma chamada indireta à função e


passá-la como parâmetro para outras funções.
• Um ponteiro para funções só pode apontar para funções que
possuam o mesmo protótipo.
Modelo:
tipoRetornado (*nomeDoPonteiro)(listaDeTipos);

Professor Me. Rooney R. A. Coelho (UFTM) Aula 1 21 de Agosto de 2017 39 / 43


Ponteiro para função

#include <stdio.h>
int soma(int a, int b){return a + b;}
int subtracao(int a, int b){return a - b;}
int produto(int a, int b){return a * b;}
int divisao(int a, int b){return a / b;}

Professor Me. Rooney R. A. Coelho (UFTM) Aula 1 21 de Agosto de 2017 40 / 43


int main(){
int x,y;
int (*p)(int,int);
char ch;
printf("Digite uma operação matematica (+,-,*,/):
,→ ");
ch = getchar();
printf("Digite 2 numeros: ");
scanf("%d %d",&x,&y);
switch(ch){
case ’+’: p = soma; break;
case ’-’: p = subtracao; break;
case ’*’: p = produto; break;
case ’/’: p = divisao; break;
}
printf( "Resultado = %d\n",p(x,y) ); // <---
return 0;
}
Professor Me. Rooney R. A. Coelho (UFTM) Aula 1 21 de Agosto de 2017 41 / 43
#include <stdio.h>
#include <math.h> // para a função pow
double integral( double (*f)(double), double a,
,→ double b){
return (b-a)/6 * ( f(a) + 4*f( (a+b)/2 ) + f(b) );
}
double func(double x){
return pow(x,3);
}
int main(){
printf("O resultado da integral é: %f\n",
,→ integral(func,0,1) );
return 0;
}

O resultado da integral é: 0.250000

Professor Me. Rooney R. A. Coelho (UFTM) Aula 1 21 de Agosto de 2017 42 / 43


Obrigado!

Professor Me. Rooney R. A. Coelho (UFTM) Aula 1 21 de Agosto de 2017 43 / 43

Anda mungkin juga menyukai