Algoritmos e Programação MC102 Prof. Paulo Miranda IC-UNICAMP Aula 15 Ponteiros.

Slides:



Advertisements
Apresentações semelhantes
Laboratório de programação III Linguagem C
Advertisements

Construção de Algoritmos AULA 07
Programação II Estruturas de Dados
Programação II Estruturas de Dados
Algoritmos e Estrutura de Dados I
Alocação Dinâmica de Memória
Programação II Estruturas, uniões e enumerações
LPG - I: Alocação Dinâmica de Memória - Ponteiros
Ponteiros em C.
LPG - I: Ponteiros e Vetores/Matrizes UDESC - SBS
LPG-I: Tipos Complexos - Estruturas
Estruturas de Dados I Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Estruturas de Dados II Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Universidade Federal do Espírito Santo Programação II Estruturas Professora: Norminda Luiza.
Linguagem C Strings.
Ponteiros em Linguagem C
Matrizes e Funções - Continuação
Fundamentos de Programação 1
Ponteiros.
APRESENTAÇÃO: GIANCARLO DE GUSMÃO GONÇALVES CURSO DE C AULA 08: Tipos Estruturados.
Ponteiros Variáveis do tipo “ponteiro” armazenam endereços de memória
Aula prática 8 Ponteiros Monitoria de Introdução à Programação
Aula prática 8 Ponteiros Monitoria de Introdução à Programação.
1 Ponteiros Ponteiros são variáveis que guardam localizações em memória. A declaração de uma variável ponteiro x para um dado tipo type é type *x; Essa.
PROGRAMAÇÃO ESTRUTURADA II
PROGRAMAÇÃO ESTRUTURADA II
Definição de Tipos Estruturas e Ponteiros
Estrutura de dados II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
PROGRAMAÇÃO I PONTEIROS.
Programação II Estruturas de Dados Aula 02 - continuação
Argumentos por valor Passagem de valor da variável indicada Não permite alteração de variável indicada Exemplo: int quadrado_de(int ); //protótipo int.
UNIDADE 5 ESTRUTURAS DE DADOS HOMOGÊNEAS
Prof. Ricardo Santos PONTEIROS
Linguagem C : Ponteiros
Técnicas de Desenvolvimento de Programas
F UNÇÕES : PASSAGEM DE PARÂMETROS Aluno:Kaynã Vasconcelos Santos Matéria: Estrutura de dados e algoritmos I Turma: Professor: Danilo Silva dos Santos.
Algoritmos e Estruturas de Dados I – Ponteiros
Estruturas de Dados Aula 2: Estruturas Estáticas 07/04/2014.
Algoritmos - Profa. Alciléia1 Profa. Maria Alciléia Alves Rocha Funções em C 2011.
Aula P.02 – BCC202 Revisão sobre Ponteiros Túlio Toffolo
Declarando e Chamando Funções
Estruturas de Dados Aula 7: Tipos Estruturados 23/04/2014.
 São utilizadas para dividir um código maior (mais complexo) em partes menores (mais simples).  Quando uma mesma tarefa é realizada várias vezes em um.
Joaquim José Hangalo  Podemos entender a memória do computador como um conjunto de células que armazenam informações.  Cada célula.
Aula prática 3 Aprofundando em Funções Parâmetros de uma função Uso do return Execução Variáveis Global, local e estática Monitoria de Introdução à.
Estruturas de Dados Aulas 3 e 4: Uso da memória e Vetores
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação Versão: _01.
Revisão Luis Antonio Tavares
Programação de Computadores I – Arquivos
CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo IX Subprogramação e Recursividade.
Aula Prática 3 Funções Monitoria Introdução à Programação.
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação Versão: _01.
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Algoritmos e Programação MC102 Prof. Paulo Miranda IC-UNICAMP Aula 2 Variáveis e Atribuições.
Programação Computacional Aula 8: Entrada e Saída pelo Console Prof a. Madeleine Medrano
Programação Computacional Aula 9: Meu primeiro programa em C
Ponteiros em C Prof. Kariston Pereira
Linguaguem de Programação II
Estrutura de Dados Revisão Professor Luiz José Hoffmann Filho
Estruturas Homogêneas – Vetores e Matrizes
PCI- Funções e Procedimentos Profa. Mercedes Gonzales Márquez.
Algoritmos e Programação MC102 Prof. Paulo Miranda IC-UNICAMP Aula 15 Funções.
Linguagem de Programação
USP – ICMC – SSC SSC0300 2º Semestre 2015 Disciplina de Linguagem de Programação e Aplicações [ Eng. Elétrica / Eletrônica ] 1 Prof. Dr. Daniel Rodrigo.
PCI- Vetores Profa. Mercedes Gonzales Márquez. Aula 5 - VetoresAlgoritmos e Estruturas de Dados I Sequência de valores todos do mesmo tipo Nome único.
PRE 1002 Éverlin Marques 2015/1.
Fundamentos de Programação 1
Aula Prática 6 Ponteiros Monitoria  Quando declaramos uma matriz:  tipo meuArray[tam];  O compilador aloca a matriz em uma região de memória.
1 Aula 07 Strings Prof. Filipe Mutz. 2 Em nossos programas ainda não vimos como armazenar palavras e textos, e eles são muito importantes! Exemplos: Programas.
FUNÇÕES Dilvan Moreira (baseado em material de Z. Liang)
Transcrição da apresentação:

Algoritmos e Programação MC102 Prof. Paulo Miranda IC-UNICAMP Aula 15 Ponteiros

Introdução: –Uma variável é um espaço da memória principal reservado para armazenar dados. –Variáveis possuem: Nome: –Identificador usado para acessar o conteúdo. Tipo: –Determina a capacidade de armazenamento. Ex: int, char, float,... Endereço: –Posição na memória principal.

Ponteiros Exemplo: –Nome: dia –Tipo: int –Endereço: 0022FF74 (hexadecimal) ou (decimal) ou &dia (representação simbólica) –Conteúdo: int dia 0022FF74

Ponteiros Definição: –Ponteiro é uma variável que armazena um endereço de memória, como por exemplo o endereço de uma outra variável. Declaração (sintaxe): tipo *nome_do_ponteiro; Exemplos: int *p; //declara ponteiro para um int. char *tmp; //declara ponteiro para um char. float *pont; //declara ponteiro para um float.

Ponteiros Exemplo: As variáveis são declaradas. O ponteiro como toda variável também possui um endereço de memória ( &p = 0022FF70 ). 27 int dia 0022FF74 #include int main(){ int dia = 27; int *p; p = &dia; return 0; } ? int *p 0022FF70

Ponteiros Exemplo: O endereço de dia é atribuído para o ponteiro p. Dizemos que p aponta para a variável dia (graficamente representado por uma seta). 27 int dia 0022FF74 #include int main(){ int dia = 27; int *p; p = &dia; return 0; } 0022FF74 int *p 0022FF70

Ponteiros Por que usar ponteiros? –Nos exemplos até agora, o acesso ao conteúdo das variáveis se dava através do nome delas. –Ponteiros nos fornecem um novo modo de acesso que explora o endereço das variáveis. –Para isso usamos o operador indireto (*), que nos permite ler e alterar o conteúdo das variáveis apontadas por um ponteiro.

Ponteiros Exemplo: O endereço de dia é atribuído para o ponteiro p. Dizemos que p aponta para a variável dia (graficamente representado por uma seta). 27 int dia 0022FF74 #include int main(){ int dia = 27; int *p; p = &dia; *p = 10; return 0; } 0022FF74 int *p 0022FF70

Ponteiros Exemplo: O código *p é o conteúdo da variável apontada por p, ou seja o conteúdo de dia, que recebe o valor int dia 0022FF74 #include int main(){ int dia = 27; int *p; p = &dia; *p = 10; return 0; } 0022FF74 int *p 0022FF70

Ponteiros Exemplo: A declaração int *p; indica que a variável p é um ponteiro para um inteiro e que *p é do tipo int. 10 int dia 0022FF74 #include int main(){ int dia = 27; int *p; p = &dia; *p = 10; return 0; } 0022FF74 int *p 0022FF70

Ponteiros Por que usar ponteiros? –Variáveis simples e estruturas são passadas por valor para funções. Ou seja, é gerada uma cópia da variável e alterações na função não produzem qualquer efeito externo. –Com o uso de ponteiros é possível realizar a passagem dos valores por referência.

Ponteiros Exemplo: Função que lê um valor inteiro. O código acima irá imprimir 0 na saída padrão sempre. O problema é que o scanf altera apenas uma variável local da função que deixa de existir após a sua execução. A variável a da função principal permanece intacta. #include void LeInteiro(int a){ printf("Entre com a: "); scanf("%d",&a); } int main(){ int a=0; LeInteiro(a); printf(“a: %d\n",a); return 0; }

Ponteiros Exemplo: Função que lê um valor inteiro. Uma possível solução é apresentada a direita. Porém funções só podem retornar um único valor e em casos onde é necessário alterar mais de uma variável o código não se aplica. #include void LeInteiro(int a){ printf("Entre com a: "); scanf("%d",&a); } int main(){ int a=0; LeInteiro(a); printf(“a: %d\n",a); return 0; } #include int LeInteiro(){ int a; printf("Entre com a: "); scanf("%d",&a); return a; } int main(){ int a=0; a = LeInteiro(); printf(“a: %d\n",a); return 0; }

Ponteiros Exemplo: Função que lê um valor inteiro. Uma solução usando ponteiros é mostrada. O ponteiro p é inicializado com o endereço da variável a da função principal. Logo, *p é o próprio conteúdo de a da função principal. Dizemos que a foi passada por referência. #include void LeInteiro(int a){ printf("Entre com a: "); scanf("%d",&a); } int main(){ int a=0; LeInteiro(a); printf(“a: %d\n",a); return 0; } #include void LeInteiro(int *p){ int a; printf("Entre com a: "); scanf("%d",&a); *p = a; } int main(){ int a=0; LeInteiro(&a); printf(“a: %d\n",a); return 0; }

Ponteiros Exemplo Real: Função que troca os valores de duas variáveis. Vimos que operações de troca são importantes em algoritmos como o Bubble sort. A função acima recebe o endereço de duas variáveis e usando uma variável temporária procede com a troca dos valores. A saída do programa será "a: 12, b: 25". #include void troca(int *a, int *b){ int tmp; tmp = *a; *a = *b; *b = tmp; } int main(){ int a=25,b=12; troca(&a, &b); printf("a: %d, b: %d\n",a,b); return 0; }