algoritmos e estruturas de dados i -...
TRANSCRIPT
![Page 1: Algoritmos e Estruturas de Dados I - lcad.icmc.usp.brpaulovic/aulas/ED-I/SCC0202-aula-01-Ponteir... · Ponteiros Constantes e Ponteiros Variáveis Tipos de Ponteiros Ponteiro constate](https://reader038.vdocuments.net/reader038/viewer/2022102721/5be3359509d3f2f02d8c86c8/html5/thumbnails/1.jpg)
Ponteiros
Ponteiros
SCC0202 - Algoritmos e Estruturas de Dados I
Prof. Fernando V. Paulovich*Baseado no material do Prof. Gustavo Batista
http://www.icmc.usp.br/~paulovic
Instituto de Ciências Matemáticas e de Computação (ICMC)Universidade de São Paulo (USP)
20 de julho de 2010
![Page 2: Algoritmos e Estruturas de Dados I - lcad.icmc.usp.brpaulovic/aulas/ED-I/SCC0202-aula-01-Ponteir... · Ponteiros Constantes e Ponteiros Variáveis Tipos de Ponteiros Ponteiro constate](https://reader038.vdocuments.net/reader038/viewer/2022102721/5be3359509d3f2f02d8c86c8/html5/thumbnails/2.jpg)
Ponteiros
Conceitos Introdutórios sobre Ponteiros
Sumário
1 Conceitos Introdutórios sobre Ponteiros
2 Operações com Ponteiros
3 Ponteiros e Matrizes
4 Ponteiros e Estruturas (structs)
5 Ponteiros e Alocação de Memória
6 Ponteiros e Passagem por Referência de Funções
![Page 3: Algoritmos e Estruturas de Dados I - lcad.icmc.usp.brpaulovic/aulas/ED-I/SCC0202-aula-01-Ponteir... · Ponteiros Constantes e Ponteiros Variáveis Tipos de Ponteiros Ponteiro constate](https://reader038.vdocuments.net/reader038/viewer/2022102721/5be3359509d3f2f02d8c86c8/html5/thumbnails/3.jpg)
Ponteiros
Conceitos Introdutórios sobre Ponteiros
Sumário
1 Conceitos Introdutórios sobre Ponteiros
2 Operações com Ponteiros
3 Ponteiros e Matrizes
4 Ponteiros e Estruturas (structs)
5 Ponteiros e Alocação de Memória
6 Ponteiros e Passagem por Referência de Funções
![Page 4: Algoritmos e Estruturas de Dados I - lcad.icmc.usp.brpaulovic/aulas/ED-I/SCC0202-aula-01-Ponteir... · Ponteiros Constantes e Ponteiros Variáveis Tipos de Ponteiros Ponteiro constate](https://reader038.vdocuments.net/reader038/viewer/2022102721/5be3359509d3f2f02d8c86c8/html5/thumbnails/4.jpg)
Ponteiros
Conceitos Introdutórios sobre Ponteiros
Introdução
O que são ponteiros?
Um ponteiro é um endereço de memória
Indica onde uma variável está armazenada, não o queestá armazenadoProporciona um modo de acesso a uma variável semreferenciá-la
Por que são usados?
Manipular elementos de uma matrizReceber argumentos em funções que necessitem modi�caro argumento originalCriar estruturas de dados complexasetc.
![Page 5: Algoritmos e Estruturas de Dados I - lcad.icmc.usp.brpaulovic/aulas/ED-I/SCC0202-aula-01-Ponteir... · Ponteiros Constantes e Ponteiros Variáveis Tipos de Ponteiros Ponteiro constate](https://reader038.vdocuments.net/reader038/viewer/2022102721/5be3359509d3f2f02d8c86c8/html5/thumbnails/5.jpg)
Ponteiros
Conceitos Introdutórios sobre Ponteiros
Introdução
O que são ponteiros?
Um ponteiro é um endereço de memóriaIndica onde uma variável está armazenada, não o queestá armazenado
Proporciona um modo de acesso a uma variável semreferenciá-la
Por que são usados?
Manipular elementos de uma matrizReceber argumentos em funções que necessitem modi�caro argumento originalCriar estruturas de dados complexasetc.
![Page 6: Algoritmos e Estruturas de Dados I - lcad.icmc.usp.brpaulovic/aulas/ED-I/SCC0202-aula-01-Ponteir... · Ponteiros Constantes e Ponteiros Variáveis Tipos de Ponteiros Ponteiro constate](https://reader038.vdocuments.net/reader038/viewer/2022102721/5be3359509d3f2f02d8c86c8/html5/thumbnails/6.jpg)
Ponteiros
Conceitos Introdutórios sobre Ponteiros
Introdução
O que são ponteiros?
Um ponteiro é um endereço de memóriaIndica onde uma variável está armazenada, não o queestá armazenadoProporciona um modo de acesso a uma variável semreferenciá-la
Por que são usados?
Manipular elementos de uma matrizReceber argumentos em funções que necessitem modi�caro argumento originalCriar estruturas de dados complexasetc.
![Page 7: Algoritmos e Estruturas de Dados I - lcad.icmc.usp.brpaulovic/aulas/ED-I/SCC0202-aula-01-Ponteir... · Ponteiros Constantes e Ponteiros Variáveis Tipos de Ponteiros Ponteiro constate](https://reader038.vdocuments.net/reader038/viewer/2022102721/5be3359509d3f2f02d8c86c8/html5/thumbnails/7.jpg)
Ponteiros
Conceitos Introdutórios sobre Ponteiros
Introdução
O que são ponteiros?
Um ponteiro é um endereço de memóriaIndica onde uma variável está armazenada, não o queestá armazenadoProporciona um modo de acesso a uma variável semreferenciá-la
Por que são usados?
Manipular elementos de uma matrizReceber argumentos em funções que necessitem modi�caro argumento originalCriar estruturas de dados complexasetc.
![Page 8: Algoritmos e Estruturas de Dados I - lcad.icmc.usp.brpaulovic/aulas/ED-I/SCC0202-aula-01-Ponteir... · Ponteiros Constantes e Ponteiros Variáveis Tipos de Ponteiros Ponteiro constate](https://reader038.vdocuments.net/reader038/viewer/2022102721/5be3359509d3f2f02d8c86c8/html5/thumbnails/8.jpg)
Ponteiros
Conceitos Introdutórios sobre Ponteiros
Introdução
O que são ponteiros?
Um ponteiro é um endereço de memóriaIndica onde uma variável está armazenada, não o queestá armazenadoProporciona um modo de acesso a uma variável semreferenciá-la
Por que são usados?
Manipular elementos de uma matriz
Receber argumentos em funções que necessitem modi�caro argumento originalCriar estruturas de dados complexasetc.
![Page 9: Algoritmos e Estruturas de Dados I - lcad.icmc.usp.brpaulovic/aulas/ED-I/SCC0202-aula-01-Ponteir... · Ponteiros Constantes e Ponteiros Variáveis Tipos de Ponteiros Ponteiro constate](https://reader038.vdocuments.net/reader038/viewer/2022102721/5be3359509d3f2f02d8c86c8/html5/thumbnails/9.jpg)
Ponteiros
Conceitos Introdutórios sobre Ponteiros
Introdução
O que são ponteiros?
Um ponteiro é um endereço de memóriaIndica onde uma variável está armazenada, não o queestá armazenadoProporciona um modo de acesso a uma variável semreferenciá-la
Por que são usados?
Manipular elementos de uma matrizReceber argumentos em funções que necessitem modi�caro argumento original
Criar estruturas de dados complexasetc.
![Page 10: Algoritmos e Estruturas de Dados I - lcad.icmc.usp.brpaulovic/aulas/ED-I/SCC0202-aula-01-Ponteir... · Ponteiros Constantes e Ponteiros Variáveis Tipos de Ponteiros Ponteiro constate](https://reader038.vdocuments.net/reader038/viewer/2022102721/5be3359509d3f2f02d8c86c8/html5/thumbnails/10.jpg)
Ponteiros
Conceitos Introdutórios sobre Ponteiros
Introdução
O que são ponteiros?
Um ponteiro é um endereço de memóriaIndica onde uma variável está armazenada, não o queestá armazenadoProporciona um modo de acesso a uma variável semreferenciá-la
Por que são usados?
Manipular elementos de uma matrizReceber argumentos em funções que necessitem modi�caro argumento originalCriar estruturas de dados complexas
etc.
![Page 11: Algoritmos e Estruturas de Dados I - lcad.icmc.usp.brpaulovic/aulas/ED-I/SCC0202-aula-01-Ponteir... · Ponteiros Constantes e Ponteiros Variáveis Tipos de Ponteiros Ponteiro constate](https://reader038.vdocuments.net/reader038/viewer/2022102721/5be3359509d3f2f02d8c86c8/html5/thumbnails/11.jpg)
Ponteiros
Conceitos Introdutórios sobre Ponteiros
Introdução
O que são ponteiros?
Um ponteiro é um endereço de memóriaIndica onde uma variável está armazenada, não o queestá armazenadoProporciona um modo de acesso a uma variável semreferenciá-la
Por que são usados?
Manipular elementos de uma matrizReceber argumentos em funções que necessitem modi�caro argumento originalCriar estruturas de dados complexasetc.
![Page 12: Algoritmos e Estruturas de Dados I - lcad.icmc.usp.brpaulovic/aulas/ED-I/SCC0202-aula-01-Ponteir... · Ponteiros Constantes e Ponteiros Variáveis Tipos de Ponteiros Ponteiro constate](https://reader038.vdocuments.net/reader038/viewer/2022102721/5be3359509d3f2f02d8c86c8/html5/thumbnails/12.jpg)
Ponteiros
Conceitos Introdutórios sobre Ponteiros
Ponteiros Constantes e Ponteiros Variáveis
Tipos de Ponteiros
Ponteiro constate não pode ter seu valor alterado(matrizes)
Ponteiro variável é um tipo especial de variável quecontém o endereço de outra variável
Dizemos que uma variável aponta para outra variávelquando a primeira contém o endereço da segunda
Observação
Um ponteiro constante é um endereço
Um ponteiro variável é um lugar para guardar endereços
![Page 13: Algoritmos e Estruturas de Dados I - lcad.icmc.usp.brpaulovic/aulas/ED-I/SCC0202-aula-01-Ponteir... · Ponteiros Constantes e Ponteiros Variáveis Tipos de Ponteiros Ponteiro constate](https://reader038.vdocuments.net/reader038/viewer/2022102721/5be3359509d3f2f02d8c86c8/html5/thumbnails/13.jpg)
Ponteiros
Conceitos Introdutórios sobre Ponteiros
Ponteiros Constantes e Ponteiros Variáveis
Tipos de Ponteiros
Ponteiro constate não pode ter seu valor alterado(matrizes)
Ponteiro variável é um tipo especial de variável quecontém o endereço de outra variável
Dizemos que uma variável aponta para outra variávelquando a primeira contém o endereço da segunda
Observação
Um ponteiro constante é um endereço
Um ponteiro variável é um lugar para guardar endereços
![Page 14: Algoritmos e Estruturas de Dados I - lcad.icmc.usp.brpaulovic/aulas/ED-I/SCC0202-aula-01-Ponteir... · Ponteiros Constantes e Ponteiros Variáveis Tipos de Ponteiros Ponteiro constate](https://reader038.vdocuments.net/reader038/viewer/2022102721/5be3359509d3f2f02d8c86c8/html5/thumbnails/14.jpg)
Ponteiros
Conceitos Introdutórios sobre Ponteiros
Ponteiros Constantes e Ponteiros Variáveis
Tipos de Ponteiros
Ponteiro constate não pode ter seu valor alterado(matrizes)
Ponteiro variável é um tipo especial de variável quecontém o endereço de outra variável
Dizemos que uma variável aponta para outra variávelquando a primeira contém o endereço da segunda
Observação
Um ponteiro constante é um endereço
Um ponteiro variável é um lugar para guardar endereços
![Page 15: Algoritmos e Estruturas de Dados I - lcad.icmc.usp.brpaulovic/aulas/ED-I/SCC0202-aula-01-Ponteir... · Ponteiros Constantes e Ponteiros Variáveis Tipos de Ponteiros Ponteiro constate](https://reader038.vdocuments.net/reader038/viewer/2022102721/5be3359509d3f2f02d8c86c8/html5/thumbnails/15.jpg)
Ponteiros
Conceitos Introdutórios sobre Ponteiros
Ponteiros Constantes e Ponteiros Variáveis
Tipos de Ponteiros
Ponteiro constate não pode ter seu valor alterado(matrizes)
Ponteiro variável é um tipo especial de variável quecontém o endereço de outra variável
Dizemos que uma variável aponta para outra variávelquando a primeira contém o endereço da segunda
Observação
Um ponteiro constante é um endereço
Um ponteiro variável é um lugar para guardar endereços
![Page 16: Algoritmos e Estruturas de Dados I - lcad.icmc.usp.brpaulovic/aulas/ED-I/SCC0202-aula-01-Ponteir... · Ponteiros Constantes e Ponteiros Variáveis Tipos de Ponteiros Ponteiro constate](https://reader038.vdocuments.net/reader038/viewer/2022102721/5be3359509d3f2f02d8c86c8/html5/thumbnails/16.jpg)
Ponteiros
Conceitos Introdutórios sobre Ponteiros
Ponteiros Constantes e Ponteiros Variáveis
Tipos de Ponteiros
Ponteiro constate não pode ter seu valor alterado(matrizes)
Ponteiro variável é um tipo especial de variável quecontém o endereço de outra variável
Dizemos que uma variável aponta para outra variávelquando a primeira contém o endereço da segunda
Observação
Um ponteiro constante é um endereço
Um ponteiro variável é um lugar para guardar endereços
![Page 17: Algoritmos e Estruturas de Dados I - lcad.icmc.usp.brpaulovic/aulas/ED-I/SCC0202-aula-01-Ponteir... · Ponteiros Constantes e Ponteiros Variáveis Tipos de Ponteiros Ponteiro constate](https://reader038.vdocuments.net/reader038/viewer/2022102721/5be3359509d3f2f02d8c86c8/html5/thumbnails/17.jpg)
Ponteiros
Conceitos Introdutórios sobre Ponteiros
Ponteiros Constantes e Ponteiros Variáveis
Tipos de Ponteiros
Ponteiro constate não pode ter seu valor alterado(matrizes)
Ponteiro variável é um tipo especial de variável quecontém o endereço de outra variável
Dizemos que uma variável aponta para outra variávelquando a primeira contém o endereço da segunda
Observação
Um ponteiro constante é um endereço
Um ponteiro variável é um lugar para guardar endereços
![Page 18: Algoritmos e Estruturas de Dados I - lcad.icmc.usp.brpaulovic/aulas/ED-I/SCC0202-aula-01-Ponteir... · Ponteiros Constantes e Ponteiros Variáveis Tipos de Ponteiros Ponteiro constate](https://reader038.vdocuments.net/reader038/viewer/2022102721/5be3359509d3f2f02d8c86c8/html5/thumbnails/18.jpg)
Ponteiros
Conceitos Introdutórios sobre Ponteiros
Endereços de Memória e Variáveis
Um endereço é a referência que o computador usa paralocalizar variáveisToda variável ocupa uma certa localização na memória, eseu endereço é o primeiro byte ocupado por ela
Inteiro (int) ocupa 2 bytes na memóriaNúmero de ponto �utuante (�oat) ocupa 4 bytes na memória
![Page 19: Algoritmos e Estruturas de Dados I - lcad.icmc.usp.brpaulovic/aulas/ED-I/SCC0202-aula-01-Ponteir... · Ponteiros Constantes e Ponteiros Variáveis Tipos de Ponteiros Ponteiro constate](https://reader038.vdocuments.net/reader038/viewer/2022102721/5be3359509d3f2f02d8c86c8/html5/thumbnails/19.jpg)
Ponteiros
Conceitos Introdutórios sobre Ponteiros
Endereços de Memória e Variáveis
Um endereço é a referência que o computador usa paralocalizar variáveisToda variável ocupa uma certa localização na memória, eseu endereço é o primeiro byte ocupado por ela
Inteiro (int) ocupa 2 bytes na memóriaNúmero de ponto �utuante (�oat) ocupa 4 bytes na memória
![Page 20: Algoritmos e Estruturas de Dados I - lcad.icmc.usp.brpaulovic/aulas/ED-I/SCC0202-aula-01-Ponteir... · Ponteiros Constantes e Ponteiros Variáveis Tipos de Ponteiros Ponteiro constate](https://reader038.vdocuments.net/reader038/viewer/2022102721/5be3359509d3f2f02d8c86c8/html5/thumbnails/20.jpg)
Ponteiros
Conceitos Introdutórios sobre Ponteiros
Operador de Endereços &
Para conhecer o endereço ocupado por uma variávelusamos o operador de endereços (&)
1 int main() {
2 int i, j, k;
3 printf("Endereço de i -> %u \n", &i);
4 printf("Endereço de j -> %u \n", &j);
5 printf("Endereço de k -> %u \n", &k);
6 return 0;
7 }
SAÍDA
Endereço de i -> 0xFF4Endereço de j -> 0xFF2Endereço de k -> 0xFF0
![Page 21: Algoritmos e Estruturas de Dados I - lcad.icmc.usp.brpaulovic/aulas/ED-I/SCC0202-aula-01-Ponteir... · Ponteiros Constantes e Ponteiros Variáveis Tipos de Ponteiros Ponteiro constate](https://reader038.vdocuments.net/reader038/viewer/2022102721/5be3359509d3f2f02d8c86c8/html5/thumbnails/21.jpg)
Ponteiros
Conceitos Introdutórios sobre Ponteiros
Operador de Endereços &
O operador de endereços (&) só pode ser usado comnomes de variáveis.
1 &(i+1) //ERRADO2 &5 //ERRADO
![Page 22: Algoritmos e Estruturas de Dados I - lcad.icmc.usp.brpaulovic/aulas/ED-I/SCC0202-aula-01-Ponteir... · Ponteiros Constantes e Ponteiros Variáveis Tipos de Ponteiros Ponteiro constate](https://reader038.vdocuments.net/reader038/viewer/2022102721/5be3359509d3f2f02d8c86c8/html5/thumbnails/22.jpg)
Ponteiros
Conceitos Introdutórios sobre Ponteiros
Declarando Variável Ponteiro
Endereços são armazenados de forma semelhante a outrasvariáveis
É necessário saber qual o tamanho que ocupa a variávelapontada por um ponteiro
O tipo da variável apontada (portanto seu tamanho) éfornecido na declaração do ponteiro
1 int *px, *py;
px e py são ponteiros que armazenam endereços de variáveis do tipo int
![Page 23: Algoritmos e Estruturas de Dados I - lcad.icmc.usp.brpaulovic/aulas/ED-I/SCC0202-aula-01-Ponteir... · Ponteiros Constantes e Ponteiros Variáveis Tipos de Ponteiros Ponteiro constate](https://reader038.vdocuments.net/reader038/viewer/2022102721/5be3359509d3f2f02d8c86c8/html5/thumbnails/23.jpg)
Ponteiros
Conceitos Introdutórios sobre Ponteiros
Declarando Variável Ponteiro
Endereços são armazenados de forma semelhante a outrasvariáveis
É necessário saber qual o tamanho que ocupa a variávelapontada por um ponteiro
O tipo da variável apontada (portanto seu tamanho) éfornecido na declaração do ponteiro
1 int *px, *py;
px e py são ponteiros que armazenam endereços de variáveis do tipo int
![Page 24: Algoritmos e Estruturas de Dados I - lcad.icmc.usp.brpaulovic/aulas/ED-I/SCC0202-aula-01-Ponteir... · Ponteiros Constantes e Ponteiros Variáveis Tipos de Ponteiros Ponteiro constate](https://reader038.vdocuments.net/reader038/viewer/2022102721/5be3359509d3f2f02d8c86c8/html5/thumbnails/24.jpg)
Ponteiros
Conceitos Introdutórios sobre Ponteiros
Declarando Variável Ponteiro
Endereços são armazenados de forma semelhante a outrasvariáveis
É necessário saber qual o tamanho que ocupa a variávelapontada por um ponteiro
O tipo da variável apontada (portanto seu tamanho) éfornecido na declaração do ponteiro
1 int *px, *py;
px e py são ponteiros que armazenam endereços de variáveis do tipo int
![Page 25: Algoritmos e Estruturas de Dados I - lcad.icmc.usp.brpaulovic/aulas/ED-I/SCC0202-aula-01-Ponteir... · Ponteiros Constantes e Ponteiros Variáveis Tipos de Ponteiros Ponteiro constate](https://reader038.vdocuments.net/reader038/viewer/2022102721/5be3359509d3f2f02d8c86c8/html5/thumbnails/25.jpg)
Ponteiros
Conceitos Introdutórios sobre Ponteiros
Declarando Variável Ponteiro
Endereços são armazenados de forma semelhante a outrasvariáveis
É necessário saber qual o tamanho que ocupa a variávelapontada por um ponteiro
O tipo da variável apontada (portanto seu tamanho) éfornecido na declaração do ponteiro
1 int *px, *py;
px e py são ponteiros que armazenam endereços de variáveis do tipo int
![Page 26: Algoritmos e Estruturas de Dados I - lcad.icmc.usp.brpaulovic/aulas/ED-I/SCC0202-aula-01-Ponteir... · Ponteiros Constantes e Ponteiros Variáveis Tipos de Ponteiros Ponteiro constate](https://reader038.vdocuments.net/reader038/viewer/2022102721/5be3359509d3f2f02d8c86c8/html5/thumbnails/26.jpg)
Ponteiros
Conceitos Introdutórios sobre Ponteiros
Declarando Variável Ponteiro
Endereços são armazenados de forma semelhante a outrasvariáveis
É necessário saber qual o tamanho que ocupa a variávelapontada por um ponteiro
O tipo da variável apontada (portanto seu tamanho) éfornecido na declaração do ponteiro
1 int *px, *py;
px e py são ponteiros que armazenam endereços de variáveis do tipo int
![Page 27: Algoritmos e Estruturas de Dados I - lcad.icmc.usp.brpaulovic/aulas/ED-I/SCC0202-aula-01-Ponteir... · Ponteiros Constantes e Ponteiros Variáveis Tipos de Ponteiros Ponteiro constate](https://reader038.vdocuments.net/reader038/viewer/2022102721/5be3359509d3f2f02d8c86c8/html5/thumbnails/27.jpg)
Ponteiros
Conceitos Introdutórios sobre Ponteiros
Declarando Variável Ponteiro
Endereços são armazenados de forma semelhante a outrasvariáveis
É necessário saber qual o tamanho que ocupa a variávelapontada por um ponteiro
O tipo da variável apontada (portanto seu tamanho) éfornecido na declaração do ponteiro
1 int *px, *py;
px e py são ponteiros que armazenam endereços de variáveis do tipo int
![Page 28: Algoritmos e Estruturas de Dados I - lcad.icmc.usp.brpaulovic/aulas/ED-I/SCC0202-aula-01-Ponteir... · Ponteiros Constantes e Ponteiros Variáveis Tipos de Ponteiros Ponteiro constate](https://reader038.vdocuments.net/reader038/viewer/2022102721/5be3359509d3f2f02d8c86c8/html5/thumbnails/28.jpg)
Ponteiros
Conceitos Introdutórios sobre Ponteiros
Operador Indireto (*)
O operador indireto (*) tem como operando um endereçoe provê acesso ao conteúdo da variável localizada em talendereço
Provê acesso ao valor da variável apontada
Ponteiros são sempre inicializados com valor 0 ou NULL
C garante que NULL não é um endereço válido
Antes de usar um ponteiro devemos atribuir algumendereço válido à ele
![Page 29: Algoritmos e Estruturas de Dados I - lcad.icmc.usp.brpaulovic/aulas/ED-I/SCC0202-aula-01-Ponteir... · Ponteiros Constantes e Ponteiros Variáveis Tipos de Ponteiros Ponteiro constate](https://reader038.vdocuments.net/reader038/viewer/2022102721/5be3359509d3f2f02d8c86c8/html5/thumbnails/29.jpg)
Ponteiros
Conceitos Introdutórios sobre Ponteiros
Operador Indireto (*)
O operador indireto (*) tem como operando um endereçoe provê acesso ao conteúdo da variável localizada em talendereço
Provê acesso ao valor da variável apontada
Ponteiros são sempre inicializados com valor 0 ou NULL
C garante que NULL não é um endereço válido
Antes de usar um ponteiro devemos atribuir algumendereço válido à ele
![Page 30: Algoritmos e Estruturas de Dados I - lcad.icmc.usp.brpaulovic/aulas/ED-I/SCC0202-aula-01-Ponteir... · Ponteiros Constantes e Ponteiros Variáveis Tipos de Ponteiros Ponteiro constate](https://reader038.vdocuments.net/reader038/viewer/2022102721/5be3359509d3f2f02d8c86c8/html5/thumbnails/30.jpg)
Ponteiros
Conceitos Introdutórios sobre Ponteiros
Operador Indireto (*)
O operador indireto (*) tem como operando um endereçoe provê acesso ao conteúdo da variável localizada em talendereço
Provê acesso ao valor da variável apontada
Ponteiros são sempre inicializados com valor 0 ou NULL
C garante que NULL não é um endereço válido
Antes de usar um ponteiro devemos atribuir algumendereço válido à ele
![Page 31: Algoritmos e Estruturas de Dados I - lcad.icmc.usp.brpaulovic/aulas/ED-I/SCC0202-aula-01-Ponteir... · Ponteiros Constantes e Ponteiros Variáveis Tipos de Ponteiros Ponteiro constate](https://reader038.vdocuments.net/reader038/viewer/2022102721/5be3359509d3f2f02d8c86c8/html5/thumbnails/31.jpg)
Ponteiros
Conceitos Introdutórios sobre Ponteiros
Operador Indireto (*)
O operador indireto (*) tem como operando um endereçoe provê acesso ao conteúdo da variável localizada em talendereço
Provê acesso ao valor da variável apontada
Ponteiros são sempre inicializados com valor 0 ou NULL
C garante que NULL não é um endereço válido
Antes de usar um ponteiro devemos atribuir algumendereço válido à ele
![Page 32: Algoritmos e Estruturas de Dados I - lcad.icmc.usp.brpaulovic/aulas/ED-I/SCC0202-aula-01-Ponteir... · Ponteiros Constantes e Ponteiros Variáveis Tipos de Ponteiros Ponteiro constate](https://reader038.vdocuments.net/reader038/viewer/2022102721/5be3359509d3f2f02d8c86c8/html5/thumbnails/32.jpg)
Ponteiros
Conceitos Introdutórios sobre Ponteiros
Operador Indireto (*)
O operador indireto (*) tem como operando um endereçoe provê acesso ao conteúdo da variável localizada em talendereço
Provê acesso ao valor da variável apontada
Ponteiros são sempre inicializados com valor 0 ou NULL
C garante que NULL não é um endereço válido
Antes de usar um ponteiro devemos atribuir algumendereço válido à ele
![Page 33: Algoritmos e Estruturas de Dados I - lcad.icmc.usp.brpaulovic/aulas/ED-I/SCC0202-aula-01-Ponteir... · Ponteiros Constantes e Ponteiros Variáveis Tipos de Ponteiros Ponteiro constate](https://reader038.vdocuments.net/reader038/viewer/2022102721/5be3359509d3f2f02d8c86c8/html5/thumbnails/33.jpg)
Ponteiros
Conceitos Introdutórios sobre Ponteiros
Operador Indireto (*)
O operador indireto (*) tem como operando um endereçoe provê acesso ao conteúdo da variável localizada em talendereço
Provê acesso ao valor da variável apontada
Ponteiros são sempre inicializados com valor 0 ou NULL
C garante que NULL não é um endereço válidoAntes de usar um ponteiro devemos atribuir algumendereço válido à ele
![Page 34: Algoritmos e Estruturas de Dados I - lcad.icmc.usp.brpaulovic/aulas/ED-I/SCC0202-aula-01-Ponteir... · Ponteiros Constantes e Ponteiros Variáveis Tipos de Ponteiros Ponteiro constate](https://reader038.vdocuments.net/reader038/viewer/2022102721/5be3359509d3f2f02d8c86c8/html5/thumbnails/34.jpg)
Ponteiros
Conceitos Introdutórios sobre Ponteiros
Exemplo de Ponteiros
1 int main() {
2 int x, y;
3 int *px, *py;
4
5 x = 10;
6 y = 20;
7
8 printf("Valor de x: %d \n", x);
9 printf("Valor de y: %d \n", y);
10
11 px = &x;
12 py = &y;
13
14 printf("Conteúdo apontado por px: %d \n", *px);
15 printf("Conteúdo apontado por py: %d \n", *py);
16
17 *px = 3;
18 *py = 5;
19
20 printf("Conteúdo apontado por px: %d \n", *px);
21 printf("Conteúdo apontado por py: %d \n", *py);
22
23 printf("Valor de x: %d \n", x);
24 printf("Valor de y: %d \n", y);
25
26 return 0;
27 }
![Page 35: Algoritmos e Estruturas de Dados I - lcad.icmc.usp.brpaulovic/aulas/ED-I/SCC0202-aula-01-Ponteir... · Ponteiros Constantes e Ponteiros Variáveis Tipos de Ponteiros Ponteiro constate](https://reader038.vdocuments.net/reader038/viewer/2022102721/5be3359509d3f2f02d8c86c8/html5/thumbnails/35.jpg)
Ponteiros
Operações com Ponteiros
Sumário
1 Conceitos Introdutórios sobre Ponteiros
2 Operações com Ponteiros
3 Ponteiros e Matrizes
4 Ponteiros e Estruturas (structs)
5 Ponteiros e Alocação de Memória
6 Ponteiros e Passagem por Referência de Funções
![Page 36: Algoritmos e Estruturas de Dados I - lcad.icmc.usp.brpaulovic/aulas/ED-I/SCC0202-aula-01-Ponteir... · Ponteiros Constantes e Ponteiros Variáveis Tipos de Ponteiros Ponteiro constate](https://reader038.vdocuments.net/reader038/viewer/2022102721/5be3359509d3f2f02d8c86c8/html5/thumbnails/36.jpg)
Ponteiros
Operações com Ponteiros
Operações com Ponteiros
A linguagem C oferece cinco operações básicas quepodem ser executadas com ponteiros
SomaSubtraçãoOperações lógicas (<,>,==,!=)Operador de dereferência ou indireto (*)Operador de endereço (&)
O seguinte programa ilustra tais operações
![Page 37: Algoritmos e Estruturas de Dados I - lcad.icmc.usp.brpaulovic/aulas/ED-I/SCC0202-aula-01-Ponteir... · Ponteiros Constantes e Ponteiros Variáveis Tipos de Ponteiros Ponteiro constate](https://reader038.vdocuments.net/reader038/viewer/2022102721/5be3359509d3f2f02d8c86c8/html5/thumbnails/37.jpg)
Ponteiros
Operações com Ponteiros
Operações com Ponteiros
A linguagem C oferece cinco operações básicas quepodem ser executadas com ponteiros
Soma
SubtraçãoOperações lógicas (<,>,==,!=)Operador de dereferência ou indireto (*)Operador de endereço (&)
O seguinte programa ilustra tais operações
![Page 38: Algoritmos e Estruturas de Dados I - lcad.icmc.usp.brpaulovic/aulas/ED-I/SCC0202-aula-01-Ponteir... · Ponteiros Constantes e Ponteiros Variáveis Tipos de Ponteiros Ponteiro constate](https://reader038.vdocuments.net/reader038/viewer/2022102721/5be3359509d3f2f02d8c86c8/html5/thumbnails/38.jpg)
Ponteiros
Operações com Ponteiros
Operações com Ponteiros
A linguagem C oferece cinco operações básicas quepodem ser executadas com ponteiros
SomaSubtração
Operações lógicas (<,>,==,!=)Operador de dereferência ou indireto (*)Operador de endereço (&)
O seguinte programa ilustra tais operações
![Page 39: Algoritmos e Estruturas de Dados I - lcad.icmc.usp.brpaulovic/aulas/ED-I/SCC0202-aula-01-Ponteir... · Ponteiros Constantes e Ponteiros Variáveis Tipos de Ponteiros Ponteiro constate](https://reader038.vdocuments.net/reader038/viewer/2022102721/5be3359509d3f2f02d8c86c8/html5/thumbnails/39.jpg)
Ponteiros
Operações com Ponteiros
Operações com Ponteiros
A linguagem C oferece cinco operações básicas quepodem ser executadas com ponteiros
SomaSubtraçãoOperações lógicas (<,>,==,!=)
Operador de dereferência ou indireto (*)Operador de endereço (&)
O seguinte programa ilustra tais operações
![Page 40: Algoritmos e Estruturas de Dados I - lcad.icmc.usp.brpaulovic/aulas/ED-I/SCC0202-aula-01-Ponteir... · Ponteiros Constantes e Ponteiros Variáveis Tipos de Ponteiros Ponteiro constate](https://reader038.vdocuments.net/reader038/viewer/2022102721/5be3359509d3f2f02d8c86c8/html5/thumbnails/40.jpg)
Ponteiros
Operações com Ponteiros
Operações com Ponteiros
A linguagem C oferece cinco operações básicas quepodem ser executadas com ponteiros
SomaSubtraçãoOperações lógicas (<,>,==,!=)Operador de dereferência ou indireto (*)
Operador de endereço (&)
O seguinte programa ilustra tais operações
![Page 41: Algoritmos e Estruturas de Dados I - lcad.icmc.usp.brpaulovic/aulas/ED-I/SCC0202-aula-01-Ponteir... · Ponteiros Constantes e Ponteiros Variáveis Tipos de Ponteiros Ponteiro constate](https://reader038.vdocuments.net/reader038/viewer/2022102721/5be3359509d3f2f02d8c86c8/html5/thumbnails/41.jpg)
Ponteiros
Operações com Ponteiros
Operações com Ponteiros
A linguagem C oferece cinco operações básicas quepodem ser executadas com ponteiros
SomaSubtraçãoOperações lógicas (<,>,==,!=)Operador de dereferência ou indireto (*)Operador de endereço (&)
O seguinte programa ilustra tais operações
![Page 42: Algoritmos e Estruturas de Dados I - lcad.icmc.usp.brpaulovic/aulas/ED-I/SCC0202-aula-01-Ponteir... · Ponteiros Constantes e Ponteiros Variáveis Tipos de Ponteiros Ponteiro constate](https://reader038.vdocuments.net/reader038/viewer/2022102721/5be3359509d3f2f02d8c86c8/html5/thumbnails/42.jpg)
Ponteiros
Operações com Ponteiros
Operações com Ponteiros
A linguagem C oferece cinco operações básicas quepodem ser executadas com ponteiros
SomaSubtraçãoOperações lógicas (<,>,==,!=)Operador de dereferência ou indireto (*)Operador de endereço (&)
O seguinte programa ilustra tais operações
![Page 43: Algoritmos e Estruturas de Dados I - lcad.icmc.usp.brpaulovic/aulas/ED-I/SCC0202-aula-01-Ponteir... · Ponteiros Constantes e Ponteiros Variáveis Tipos de Ponteiros Ponteiro constate](https://reader038.vdocuments.net/reader038/viewer/2022102721/5be3359509d3f2f02d8c86c8/html5/thumbnails/43.jpg)
Ponteiros
Operações com Ponteiros
Operações com Ponteiros
1 int main() {
2 int x = 5, y = 6;
3 int *px, *py;
4
5 px = &x;
6 py = &y;
7
8 if ( px < py ) printf("py - px = %u \n", py-px);
9 else printf("px - py = %u \n", px-py);
10
11 printf("px = %u, *px = %d, &px = %u\n", px, *px, &px);
12 printf("py = %u, *py = %d, &py = %u\n", py, *py, &py);
13
14 px++;
15 printf("px = %u, *px = %d, &px = %u\n", px, *px, &px);
16
17 py = px + 3;
18 printf("py = %u, *py = %d, &py = %u\n", py, *py, &py);
19 printf("py - px = %u\n", py - px);
20
21 return 0;
22 }
![Page 44: Algoritmos e Estruturas de Dados I - lcad.icmc.usp.brpaulovic/aulas/ED-I/SCC0202-aula-01-Ponteir... · Ponteiros Constantes e Ponteiros Variáveis Tipos de Ponteiros Ponteiro constate](https://reader038.vdocuments.net/reader038/viewer/2022102721/5be3359509d3f2f02d8c86c8/html5/thumbnails/44.jpg)
Ponteiros
Operações com Ponteiros
Operações com Ponteiros
SAÍDApy - px = 1px = 65488, *px = 5, &px = 65492py = 65490, *py = 6, &py = 65494px = 65490, *px = 6, &px = 65492py = 65496, *py = -28, &py = 65494py - px = 3
![Page 45: Algoritmos e Estruturas de Dados I - lcad.icmc.usp.brpaulovic/aulas/ED-I/SCC0202-aula-01-Ponteir... · Ponteiros Constantes e Ponteiros Variáveis Tipos de Ponteiros Ponteiro constate](https://reader038.vdocuments.net/reader038/viewer/2022102721/5be3359509d3f2f02d8c86c8/html5/thumbnails/45.jpg)
Ponteiros
Operações com Ponteiros
Precedência
Como a expressão *lista++ é interpretada pelocompilador?
1 *lista++ == *(lista++), ou
2 *lista++ == (*lista)++
Quando operadores têm a mesma precedência, como é ocaso do operador indireto e do operador de incremento,eles são resolvidos por associação: da direta paraesquerda ou da esquerda para a direitaComo operadores unários são resolvidos da direta para aesquerda, temos que a expressão é interpretada como:
1 *lista++ == *(lista++)
![Page 46: Algoritmos e Estruturas de Dados I - lcad.icmc.usp.brpaulovic/aulas/ED-I/SCC0202-aula-01-Ponteir... · Ponteiros Constantes e Ponteiros Variáveis Tipos de Ponteiros Ponteiro constate](https://reader038.vdocuments.net/reader038/viewer/2022102721/5be3359509d3f2f02d8c86c8/html5/thumbnails/46.jpg)
Ponteiros
Operações com Ponteiros
Precedência
Como a expressão *lista++ é interpretada pelocompilador?
1 *lista++ == *(lista++), ou
2 *lista++ == (*lista)++
Quando operadores têm a mesma precedência, como é ocaso do operador indireto e do operador de incremento,eles são resolvidos por associação: da direta paraesquerda ou da esquerda para a direitaComo operadores unários são resolvidos da direta para aesquerda, temos que a expressão é interpretada como:
1 *lista++ == *(lista++)
![Page 47: Algoritmos e Estruturas de Dados I - lcad.icmc.usp.brpaulovic/aulas/ED-I/SCC0202-aula-01-Ponteir... · Ponteiros Constantes e Ponteiros Variáveis Tipos de Ponteiros Ponteiro constate](https://reader038.vdocuments.net/reader038/viewer/2022102721/5be3359509d3f2f02d8c86c8/html5/thumbnails/47.jpg)
Ponteiros
Operações com Ponteiros
Precedência
Como a expressão *lista++ é interpretada pelocompilador?
1 *lista++ == *(lista++), ou
2 *lista++ == (*lista)++
Quando operadores têm a mesma precedência, como é ocaso do operador indireto e do operador de incremento,eles são resolvidos por associação: da direta paraesquerda ou da esquerda para a direitaComo operadores unários são resolvidos da direta para aesquerda, temos que a expressão é interpretada como:
1 *lista++ == *(lista++)
![Page 48: Algoritmos e Estruturas de Dados I - lcad.icmc.usp.brpaulovic/aulas/ED-I/SCC0202-aula-01-Ponteir... · Ponteiros Constantes e Ponteiros Variáveis Tipos de Ponteiros Ponteiro constate](https://reader038.vdocuments.net/reader038/viewer/2022102721/5be3359509d3f2f02d8c86c8/html5/thumbnails/48.jpg)
Ponteiros
Ponteiros e Matrizes
Sumário
1 Conceitos Introdutórios sobre Ponteiros
2 Operações com Ponteiros
3 Ponteiros e Matrizes
4 Ponteiros e Estruturas (structs)
5 Ponteiros e Alocação de Memória
6 Ponteiros e Passagem por Referência de Funções
![Page 49: Algoritmos e Estruturas de Dados I - lcad.icmc.usp.brpaulovic/aulas/ED-I/SCC0202-aula-01-Ponteir... · Ponteiros Constantes e Ponteiros Variáveis Tipos de Ponteiros Ponteiro constate](https://reader038.vdocuments.net/reader038/viewer/2022102721/5be3359509d3f2f02d8c86c8/html5/thumbnails/49.jpg)
Ponteiros
Ponteiros e Matrizes
Ponteiros e Matrizes
Existe um estreito relacionamento entre Matrizes ePonteiros em C de forma que qualquer operação quepossa ser feita com índice de matrizes pode ser feita componteiros
O nome de uma matriz é um endereço, ou seja, umponteiro
Na verdade o nome da matriz é um ponteiro constante
![Page 50: Algoritmos e Estruturas de Dados I - lcad.icmc.usp.brpaulovic/aulas/ED-I/SCC0202-aula-01-Ponteir... · Ponteiros Constantes e Ponteiros Variáveis Tipos de Ponteiros Ponteiro constate](https://reader038.vdocuments.net/reader038/viewer/2022102721/5be3359509d3f2f02d8c86c8/html5/thumbnails/50.jpg)
Ponteiros
Ponteiros e Matrizes
Ponteiros e Matrizes
Existe um estreito relacionamento entre Matrizes ePonteiros em C de forma que qualquer operação quepossa ser feita com índice de matrizes pode ser feita componteiros
O nome de uma matriz é um endereço, ou seja, umponteiro
Na verdade o nome da matriz é um ponteiro constante
![Page 51: Algoritmos e Estruturas de Dados I - lcad.icmc.usp.brpaulovic/aulas/ED-I/SCC0202-aula-01-Ponteir... · Ponteiros Constantes e Ponteiros Variáveis Tipos de Ponteiros Ponteiro constate](https://reader038.vdocuments.net/reader038/viewer/2022102721/5be3359509d3f2f02d8c86c8/html5/thumbnails/51.jpg)
Ponteiros
Ponteiros e Matrizes
Ponteiros e Matrizes
Existe um estreito relacionamento entre Matrizes ePonteiros em C de forma que qualquer operação quepossa ser feita com índice de matrizes pode ser feita componteiros
O nome de uma matriz é um endereço, ou seja, umponteiro
Na verdade o nome da matriz é um ponteiro constante
![Page 52: Algoritmos e Estruturas de Dados I - lcad.icmc.usp.brpaulovic/aulas/ED-I/SCC0202-aula-01-Ponteir... · Ponteiros Constantes e Ponteiros Variáveis Tipos de Ponteiros Ponteiro constate](https://reader038.vdocuments.net/reader038/viewer/2022102721/5be3359509d3f2f02d8c86c8/html5/thumbnails/52.jpg)
Ponteiros
Ponteiros e Matrizes
Ponteiros e Matrizes
Versão usando notação de matriz
1 int main() {
2 int nums[] = {92,81,70,69,58};
3 for(int d = 0; d < 5; d++) printf("%d\n", nums[d]);
4 return 0;
5 }
Versão usando notação de ponteiros
1 int main() {
2 int nums[] = {92,81,70,69,58};
3 for(int d = 0; d < 5; d++) printf("%d\n", *(nums+d));
4 return 0;
5 }
![Page 53: Algoritmos e Estruturas de Dados I - lcad.icmc.usp.brpaulovic/aulas/ED-I/SCC0202-aula-01-Ponteir... · Ponteiros Constantes e Ponteiros Variáveis Tipos de Ponteiros Ponteiro constate](https://reader038.vdocuments.net/reader038/viewer/2022102721/5be3359509d3f2f02d8c86c8/html5/thumbnails/53.jpg)
Ponteiros
Ponteiros e Matrizes
Ponteiros e Matrizes
De forma geral, temos
1 *(nome_matriz + índice) = nome_matriz[índice]
![Page 54: Algoritmos e Estruturas de Dados I - lcad.icmc.usp.brpaulovic/aulas/ED-I/SCC0202-aula-01-Ponteir... · Ponteiros Constantes e Ponteiros Variáveis Tipos de Ponteiros Ponteiro constate](https://reader038.vdocuments.net/reader038/viewer/2022102721/5be3359509d3f2f02d8c86c8/html5/thumbnails/54.jpg)
Ponteiros
Ponteiros e Matrizes
Ponteiros e Matrizes
O endereço de um elemento de uma matriz pode serreferenciado de duas formas
em notação ponteiro (nums+d)em notação de matriz (&nums[d])
Considerando uma matriz de inteiros, no endereço 3000
1 int nums[] = {92,81,70,69,58}
2
3 &nums[2] == (nums+2) == 3004
4 nums[2] == *(nums+2) == 70
![Page 55: Algoritmos e Estruturas de Dados I - lcad.icmc.usp.brpaulovic/aulas/ED-I/SCC0202-aula-01-Ponteir... · Ponteiros Constantes e Ponteiros Variáveis Tipos de Ponteiros Ponteiro constate](https://reader038.vdocuments.net/reader038/viewer/2022102721/5be3359509d3f2f02d8c86c8/html5/thumbnails/55.jpg)
Ponteiros
Ponteiros e Matrizes
Ponteiros e Matrizes
O endereço de um elemento de uma matriz pode serreferenciado de duas formas
em notação ponteiro (nums+d)em notação de matriz (&nums[d])
Considerando uma matriz de inteiros, no endereço 3000
1 int nums[] = {92,81,70,69,58}
2
3 &nums[2] == (nums+2) == 3004
4 nums[2] == *(nums+2) == 70
![Page 56: Algoritmos e Estruturas de Dados I - lcad.icmc.usp.brpaulovic/aulas/ED-I/SCC0202-aula-01-Ponteir... · Ponteiros Constantes e Ponteiros Variáveis Tipos de Ponteiros Ponteiro constate](https://reader038.vdocuments.net/reader038/viewer/2022102721/5be3359509d3f2f02d8c86c8/html5/thumbnails/56.jpg)
Ponteiros
Ponteiros e Matrizes
Ponteiros e Matrizes
O endereço de um elemento de uma matriz pode serreferenciado de duas formas
em notação ponteiro (nums+d)em notação de matriz (&nums[d])
Considerando uma matriz de inteiros, no endereço 3000
1 int nums[] = {92,81,70,69,58}
2
3 &nums[2] == (nums+2) == 3004
4 nums[2] == *(nums+2) == 70
![Page 57: Algoritmos e Estruturas de Dados I - lcad.icmc.usp.brpaulovic/aulas/ED-I/SCC0202-aula-01-Ponteir... · Ponteiros Constantes e Ponteiros Variáveis Tipos de Ponteiros Ponteiro constate](https://reader038.vdocuments.net/reader038/viewer/2022102721/5be3359509d3f2f02d8c86c8/html5/thumbnails/57.jpg)
Ponteiros
Ponteiros e Matrizes
Ponteiros e Matrizes
Considere o seguinte código
1 int vetor[10];
2
3 for(int i=0; i < 10; i++) {
4 *(vetor+i) = i;
5 }
Posso fazer?
1 *(vetor++) = i;
Erro pois vetor é um ponteiro constate, portanto nãopode ser alterado
![Page 58: Algoritmos e Estruturas de Dados I - lcad.icmc.usp.brpaulovic/aulas/ED-I/SCC0202-aula-01-Ponteir... · Ponteiros Constantes e Ponteiros Variáveis Tipos de Ponteiros Ponteiro constate](https://reader038.vdocuments.net/reader038/viewer/2022102721/5be3359509d3f2f02d8c86c8/html5/thumbnails/58.jpg)
Ponteiros
Ponteiros e Matrizes
Ponteiros e Matrizes
Considere o seguinte código
1 int vetor[10];
2
3 for(int i=0; i < 10; i++) {
4 *(vetor+i) = i;
5 }
Posso fazer?
1 *(vetor++) = i;
Erro pois vetor é um ponteiro constate, portanto nãopode ser alterado
![Page 59: Algoritmos e Estruturas de Dados I - lcad.icmc.usp.brpaulovic/aulas/ED-I/SCC0202-aula-01-Ponteir... · Ponteiros Constantes e Ponteiros Variáveis Tipos de Ponteiros Ponteiro constate](https://reader038.vdocuments.net/reader038/viewer/2022102721/5be3359509d3f2f02d8c86c8/html5/thumbnails/59.jpg)
Ponteiros
Ponteiros e Matrizes
Ponteiros e Matrizes
Considere o seguinte código
1 int vetor[10];
2
3 for(int i=0; i < 10; i++) {
4 *(vetor+i) = i;
5 }
Posso fazer?
1 *(vetor++) = i;
Erro pois vetor é um ponteiro constate, portanto nãopode ser alterado
![Page 60: Algoritmos e Estruturas de Dados I - lcad.icmc.usp.brpaulovic/aulas/ED-I/SCC0202-aula-01-Ponteir... · Ponteiros Constantes e Ponteiros Variáveis Tipos de Ponteiros Ponteiro constate](https://reader038.vdocuments.net/reader038/viewer/2022102721/5be3359509d3f2f02d8c86c8/html5/thumbnails/60.jpg)
Ponteiros
Ponteiros e Matrizes
Ponteiros e Matrizes
Observação
Não se pode alterar o valor de um ponteiro constante,somente de um ponteiro variável
![Page 61: Algoritmos e Estruturas de Dados I - lcad.icmc.usp.brpaulovic/aulas/ED-I/SCC0202-aula-01-Ponteir... · Ponteiros Constantes e Ponteiros Variáveis Tipos de Ponteiros Ponteiro constate](https://reader038.vdocuments.net/reader038/viewer/2022102721/5be3359509d3f2f02d8c86c8/html5/thumbnails/61.jpg)
Ponteiros
Ponteiros e Matrizes
Ponteiros para matrizes usando funções
Na função adconst() a declaração int *ptr éequivalente a int ptr[]
1 int const TAM = 5;
2
3 void adconst(int *ptr, int num, int con ) {
4 for (int k = 0; k < num; k++) *(ptr) = *(ptr++) + con;
5 }
6
7 int main() {
8 int matriz[TAM] = {3,5,7,9,11};
9 int c = 10;
10
11 adconst(matriz, TAM, c);
12
13 for(int j = 0; j < TAM; j++) printf("%d", *(matriz+j));
14
15 return 0;
16 }
![Page 62: Algoritmos e Estruturas de Dados I - lcad.icmc.usp.brpaulovic/aulas/ED-I/SCC0202-aula-01-Ponteir... · Ponteiros Constantes e Ponteiros Variáveis Tipos de Ponteiros Ponteiro constate](https://reader038.vdocuments.net/reader038/viewer/2022102721/5be3359509d3f2f02d8c86c8/html5/thumbnails/62.jpg)
Ponteiros
Ponteiros e Estruturas (structs)
Sumário
1 Conceitos Introdutórios sobre Ponteiros
2 Operações com Ponteiros
3 Ponteiros e Matrizes
4 Ponteiros e Estruturas (structs)
5 Ponteiros e Alocação de Memória
6 Ponteiros e Passagem por Referência de Funções
![Page 63: Algoritmos e Estruturas de Dados I - lcad.icmc.usp.brpaulovic/aulas/ED-I/SCC0202-aula-01-Ponteir... · Ponteiros Constantes e Ponteiros Variáveis Tipos de Ponteiros Ponteiro constate](https://reader038.vdocuments.net/reader038/viewer/2022102721/5be3359509d3f2f02d8c86c8/html5/thumbnails/63.jpg)
Ponteiros
Ponteiros e Estruturas (structs)
Ponteiros e Estruturas (structs)
Como em qualquer outro tipo, ponteiros para estruturaspodem ser de�nidos
1 typedef struct ITEM {
2 int chave;
3 int valor;
4 };
5
6 int main() {
7 struct ITEM item; //de�ne uma variável8 struct ITEM *pitem; //de�ne um ponteiro9
10 pitem = &item; //ponteiro aponta para variável11
12 (*pitem).chave = 1;
13 (*pitem).valor = 59;
14
15 return 0;
16 }
![Page 64: Algoritmos e Estruturas de Dados I - lcad.icmc.usp.brpaulovic/aulas/ED-I/SCC0202-aula-01-Ponteir... · Ponteiros Constantes e Ponteiros Variáveis Tipos de Ponteiros Ponteiro constate](https://reader038.vdocuments.net/reader038/viewer/2022102721/5be3359509d3f2f02d8c86c8/html5/thumbnails/64.jpg)
Ponteiros
Ponteiros e Estruturas (structs)
Ponteiros e Estruturas (structs)
Uma notação do tipo (*pitem).chave é confusa, deforma que a linguagem C de�ne um operador adicional(->) para acessar membros de estruturas através deponteiros
O operador -> substitui o operador . no caso dautilização de um ponteiro para uma estrutura (struct)
1 pitem->chave = 1; //ao invés de (*pitem).chave = 1;2 pitem->valor = 59; //ao invés de (*pitem).valor = 59;
![Page 65: Algoritmos e Estruturas de Dados I - lcad.icmc.usp.brpaulovic/aulas/ED-I/SCC0202-aula-01-Ponteir... · Ponteiros Constantes e Ponteiros Variáveis Tipos de Ponteiros Ponteiro constate](https://reader038.vdocuments.net/reader038/viewer/2022102721/5be3359509d3f2f02d8c86c8/html5/thumbnails/65.jpg)
Ponteiros
Ponteiros e Estruturas (structs)
Ponteiros e Estruturas (structs)
Uma notação do tipo (*pitem).chave é confusa, deforma que a linguagem C de�ne um operador adicional(->) para acessar membros de estruturas através deponteiros
O operador -> substitui o operador . no caso dautilização de um ponteiro para uma estrutura (struct)
1 pitem->chave = 1; //ao invés de (*pitem).chave = 1;2 pitem->valor = 59; //ao invés de (*pitem).valor = 59;
![Page 66: Algoritmos e Estruturas de Dados I - lcad.icmc.usp.brpaulovic/aulas/ED-I/SCC0202-aula-01-Ponteir... · Ponteiros Constantes e Ponteiros Variáveis Tipos de Ponteiros Ponteiro constate](https://reader038.vdocuments.net/reader038/viewer/2022102721/5be3359509d3f2f02d8c86c8/html5/thumbnails/66.jpg)
Ponteiros
Ponteiros e Estruturas (structs)
Ponteiros e Estruturas (structs)
Uma notação do tipo (*pitem).chave é confusa, deforma que a linguagem C de�ne um operador adicional(->) para acessar membros de estruturas através deponteiros
O operador -> substitui o operador . no caso dautilização de um ponteiro para uma estrutura (struct)
1 pitem->chave = 1; //ao invés de (*pitem).chave = 1;2 pitem->valor = 59; //ao invés de (*pitem).valor = 59;
![Page 67: Algoritmos e Estruturas de Dados I - lcad.icmc.usp.brpaulovic/aulas/ED-I/SCC0202-aula-01-Ponteir... · Ponteiros Constantes e Ponteiros Variáveis Tipos de Ponteiros Ponteiro constate](https://reader038.vdocuments.net/reader038/viewer/2022102721/5be3359509d3f2f02d8c86c8/html5/thumbnails/67.jpg)
Ponteiros
Ponteiros e Estruturas (structs)
Ponteiros e Estruturas (structs)
Uma notação do tipo (*pitem).chave é confusa, deforma que a linguagem C de�ne um operador adicional(->) para acessar membros de estruturas através deponteiros
O operador -> substitui o operador . no caso dautilização de um ponteiro para uma estrutura (struct)
1 pitem->chave = 1; //ao invés de (*pitem).chave = 1;2 pitem->valor = 59; //ao invés de (*pitem).valor = 59;
![Page 68: Algoritmos e Estruturas de Dados I - lcad.icmc.usp.brpaulovic/aulas/ED-I/SCC0202-aula-01-Ponteir... · Ponteiros Constantes e Ponteiros Variáveis Tipos de Ponteiros Ponteiro constate](https://reader038.vdocuments.net/reader038/viewer/2022102721/5be3359509d3f2f02d8c86c8/html5/thumbnails/68.jpg)
Ponteiros
Ponteiros e Alocação de Memória
Sumário
1 Conceitos Introdutórios sobre Ponteiros
2 Operações com Ponteiros
3 Ponteiros e Matrizes
4 Ponteiros e Estruturas (structs)
5 Ponteiros e Alocação de Memória
6 Ponteiros e Passagem por Referência de Funções
![Page 69: Algoritmos e Estruturas de Dados I - lcad.icmc.usp.brpaulovic/aulas/ED-I/SCC0202-aula-01-Ponteir... · Ponteiros Constantes e Ponteiros Variáveis Tipos de Ponteiros Ponteiro constate](https://reader038.vdocuments.net/reader038/viewer/2022102721/5be3359509d3f2f02d8c86c8/html5/thumbnails/69.jpg)
Ponteiros
Ponteiros e Alocação de Memória
Alocação de Memória
É possível alocar memória para a qual um ponteiroaponta, ao invés de fazê-lo apontar para uma variável
Para tal, uma chamada ao procedimento prede�nidomalloc() deve ser feita
Uma vez alocada memória, não esquecer de liberar comfree()
Para usar malloc() e free() não esqueça de incluir#include <stdlib.h>
![Page 70: Algoritmos e Estruturas de Dados I - lcad.icmc.usp.brpaulovic/aulas/ED-I/SCC0202-aula-01-Ponteir... · Ponteiros Constantes e Ponteiros Variáveis Tipos de Ponteiros Ponteiro constate](https://reader038.vdocuments.net/reader038/viewer/2022102721/5be3359509d3f2f02d8c86c8/html5/thumbnails/70.jpg)
Ponteiros
Ponteiros e Alocação de Memória
Alocação de Memória
É possível alocar memória para a qual um ponteiroaponta, ao invés de fazê-lo apontar para uma variável
Para tal, uma chamada ao procedimento prede�nidomalloc() deve ser feita
Uma vez alocada memória, não esquecer de liberar comfree()
Para usar malloc() e free() não esqueça de incluir#include <stdlib.h>
![Page 71: Algoritmos e Estruturas de Dados I - lcad.icmc.usp.brpaulovic/aulas/ED-I/SCC0202-aula-01-Ponteir... · Ponteiros Constantes e Ponteiros Variáveis Tipos de Ponteiros Ponteiro constate](https://reader038.vdocuments.net/reader038/viewer/2022102721/5be3359509d3f2f02d8c86c8/html5/thumbnails/71.jpg)
Ponteiros
Ponteiros e Alocação de Memória
Alocação de Memória
É possível alocar memória para a qual um ponteiroaponta, ao invés de fazê-lo apontar para uma variável
Para tal, uma chamada ao procedimento prede�nidomalloc() deve ser feita
Uma vez alocada memória, não esquecer de liberar comfree()
Para usar malloc() e free() não esqueça de incluir#include <stdlib.h>
![Page 72: Algoritmos e Estruturas de Dados I - lcad.icmc.usp.brpaulovic/aulas/ED-I/SCC0202-aula-01-Ponteir... · Ponteiros Constantes e Ponteiros Variáveis Tipos de Ponteiros Ponteiro constate](https://reader038.vdocuments.net/reader038/viewer/2022102721/5be3359509d3f2f02d8c86c8/html5/thumbnails/72.jpg)
Ponteiros
Ponteiros e Alocação de Memória
Alocação de Memória
É possível alocar memória para a qual um ponteiroaponta, ao invés de fazê-lo apontar para uma variável
Para tal, uma chamada ao procedimento prede�nidomalloc() deve ser feita
Uma vez alocada memória, não esquecer de liberar comfree()
Para usar malloc() e free() não esqueça de incluir#include <stdlib.h>
![Page 73: Algoritmos e Estruturas de Dados I - lcad.icmc.usp.brpaulovic/aulas/ED-I/SCC0202-aula-01-Ponteir... · Ponteiros Constantes e Ponteiros Variáveis Tipos de Ponteiros Ponteiro constate](https://reader038.vdocuments.net/reader038/viewer/2022102721/5be3359509d3f2f02d8c86c8/html5/thumbnails/73.jpg)
Ponteiros
Ponteiros e Alocação de Memória
Alocação de Memória
1 typedef struct ITEM {
2 int chave;
3 int valor;
4 };
5
6 //aloca memória para um ITEM7 struct ITEM *n = (struct ITEM *)malloc(sizeof(struct ITEM))
8
9 //libera memória alocada10 free(n);
Uma chamada a malloc() faz duas tarefasCria uma variável dinâmica do tipo que n ponta, em umaárea de memória chamada heap
Faz com que n aponte para essa variável dinâmica recémcriada
![Page 74: Algoritmos e Estruturas de Dados I - lcad.icmc.usp.brpaulovic/aulas/ED-I/SCC0202-aula-01-Ponteir... · Ponteiros Constantes e Ponteiros Variáveis Tipos de Ponteiros Ponteiro constate](https://reader038.vdocuments.net/reader038/viewer/2022102721/5be3359509d3f2f02d8c86c8/html5/thumbnails/74.jpg)
Ponteiros
Ponteiros e Alocação de Memória
Alocação de Memória
1 typedef struct ITEM {
2 int chave;
3 int valor;
4 };
5
6 //aloca memória para um ITEM7 struct ITEM *n = (struct ITEM *)malloc(sizeof(struct ITEM))
8
9 //libera memória alocada10 free(n);
Uma chamada a malloc() faz duas tarefasCria uma variável dinâmica do tipo que n ponta, em umaárea de memória chamada heap
Faz com que n aponte para essa variável dinâmica recémcriada
![Page 75: Algoritmos e Estruturas de Dados I - lcad.icmc.usp.brpaulovic/aulas/ED-I/SCC0202-aula-01-Ponteir... · Ponteiros Constantes e Ponteiros Variáveis Tipos de Ponteiros Ponteiro constate](https://reader038.vdocuments.net/reader038/viewer/2022102721/5be3359509d3f2f02d8c86c8/html5/thumbnails/75.jpg)
Ponteiros
Ponteiros e Passagem por Referência de Funções
Sumário
1 Conceitos Introdutórios sobre Ponteiros
2 Operações com Ponteiros
3 Ponteiros e Matrizes
4 Ponteiros e Estruturas (structs)
5 Ponteiros e Alocação de Memória
6 Ponteiros e Passagem por Referência de Funções
![Page 76: Algoritmos e Estruturas de Dados I - lcad.icmc.usp.brpaulovic/aulas/ED-I/SCC0202-aula-01-Ponteir... · Ponteiros Constantes e Ponteiros Variáveis Tipos de Ponteiros Ponteiro constate](https://reader038.vdocuments.net/reader038/viewer/2022102721/5be3359509d3f2f02d8c86c8/html5/thumbnails/76.jpg)
Ponteiros
Ponteiros e Passagem por Referência de Funções
Passagem de Parâmetros
Argumentos em C são passados para funções usandoChamada por Valor
É feito uma cópia dos argumentos passados para seremusados dentro da função
Isso pode causar duas restriçõesMemória e tempo de processamento extra sãonecessários para realizar essa cópiaAlterações aos argumentos são feitos localmente, não sãovisíveis fora da função
![Page 77: Algoritmos e Estruturas de Dados I - lcad.icmc.usp.brpaulovic/aulas/ED-I/SCC0202-aula-01-Ponteir... · Ponteiros Constantes e Ponteiros Variáveis Tipos de Ponteiros Ponteiro constate](https://reader038.vdocuments.net/reader038/viewer/2022102721/5be3359509d3f2f02d8c86c8/html5/thumbnails/77.jpg)
Ponteiros
Ponteiros e Passagem por Referência de Funções
Passagem de Parâmetros
Ponteiros podem ser usados para que seja possível acessaros argumentos originais passados
Possibilita �retornar� valores nos argumentos das funçõesEvita cópia de argumentos muito grandes (p.ex. structs)
Esse tipo de chamada é conhecido como Chamada porReferência
Na verdade ainda são feito cópias dos ponteiros, masessas indicam os endereços dos argumentos originais
![Page 78: Algoritmos e Estruturas de Dados I - lcad.icmc.usp.brpaulovic/aulas/ED-I/SCC0202-aula-01-Ponteir... · Ponteiros Constantes e Ponteiros Variáveis Tipos de Ponteiros Ponteiro constate](https://reader038.vdocuments.net/reader038/viewer/2022102721/5be3359509d3f2f02d8c86c8/html5/thumbnails/78.jpg)
Ponteiros
Ponteiros e Passagem por Referência de Funções
Passagem de Parâmetros
1 void altera(int *px, int *py) {
2 *px = *px + 3;
3 *py = *py + 5;
4 }
5
6 int main() {
7 int x, y;
8
9 x = 10;
10 y = 20;
11
12 printf("X = %d, Y = %d", x, y);
13
14 altera(&x, &y);
15
16 printf("X = %d, Y = %d", x, y);
17
18 return 0;
19 }