Algoritmos e Estrutura de Dados - Aula 05
-
Upload
thomas-da-costa -
Category
Technology
-
view
478 -
download
3
Transcript of Algoritmos e Estrutura de Dados - Aula 05
ANHANGUERA – 2016.1
ALGORITMOS E ESTRUTURA DE DADOSAULA 05 – PONTEIROS, VETORES E MATRIZES
Prof. Thomás da [email protected]
ALGORITMOS E ESTRUTURA DE DADOS – Prof. Thomás da Costa
PONTEIROS, VETORES E MATRIZES
PONTEIROS
ALGORITMOS E ESTRUTURA DE DADOS – Prof. Thomás da Costa
PONTEIROS, VETORES E MATRIZES
É um tipo de variável que armazena um endereço de memoria referente a uma outra variável. O ponteiro não armazena diretamente um valor como os outros tipos em C++.
PonteirosO que é?:
ALGORITMOS E ESTRUTURA DE DADOS – Prof. Thomás da Costa
Para operação com ponteiros, utilizamos dois operadores unários:
PonteirosOperadores:
Operador Descrição
* Utilizado para declarar um ponteiro e para retornar o valor
& Utilizado para retornar o endereço de memória da variável
Vamos ver como declarar uma variável do tipo ponteiro !!!
PONTEIROS, VETORES E MATRIZES
ALGORITMOS E ESTRUTURA DE DADOS – Prof. Thomás da Costa
Declarando uma variável do tipo ponteiro:
int *ptr;Tipo da variável
Nome da variável
Operador unário
Ponteiros
PONTEIROS, VETORES E MATRIZES
ALGORITMOS E ESTRUTURA DE DADOS – Prof. Thomás da Costa
#include <iostream> using namespace std; int main(){
int *ptr;
cout << ptr << endl;}
Declarando um ponteiro
Exibe o endereço da variável, neste caso, nenhum endereço foi atribuído
ALGORITMOS E ESTRUTURA DE DADOS – Prof. Thomás da Costa
PonteirosDeclaração e atribuição de ponteiros:
Variável ponteiro
Atribuindo o endereço de memória
int *ptr;int valor;
valor = 1500;ptr = &valor;
PONTEIROS, VETORES E MATRIZES
ALGORITMOS E ESTRUTURA DE DADOS – Prof. Thomás da Costa
#include <iostream> using namespace std; int main(){
int valor;int *ptr;
valor = 1500;ptr = &valor;
cout << ptr << endl;cout << *ptr << endl;
}
ptrvalor
0x23fe480x23fe44
0x23fe480x23fe44 0x23fe441500
1 12
23 4
34
ALGORITMOS E ESTRUTURA DE DADOS – Prof. Thomás da Costa
PonteirosMais detalhes:
- Ponteiro armazena o endereço de memória- O operador & mostra o endereço da variável - O operador * é utilizado na declaração do ponteiro- Exibindo o valor de um ponteiro com cout é mostrado o
endereço referenciado - Utilizando o operador * seguido pelo nome da variável
de ponteiro é exibido o valor atribuído no endereço de memória referente.
Vamos ver mais um exemplo !!!
PONTEIROS, VETORES E MATRIZES
ALGORITMOS E ESTRUTURA DE DADOS – Prof. Thomás da Costa
#include <iostream> using namespace std; int main(){
int valor;int *ptr;int total;
valor = 1600;ptr = &valor;total = *ptr;
cout << *ptr << endl;
cout << total << endl;}
ptrvalor
0x23fe480x23fe44
total
0x23fe40
0x23fe480x23fe44 0x23fe401600 0x23fe44 1600
112 3
234
4
56
5 6
ALGORITMOS E ESTRUTURA DE DADOS – Prof. Thomás da Costa
PonteirosImportante:
A atribuição de valores para ponteiros, deve ser do mesmo tipo. Quando as variáveis são de tipos diferentes, vamos ter um erro de compilação.
PONTEIROS, VETORES E MATRIZES
ALGORITMOS E ESTRUTURA DE DADOS – Prof. Thomás da Costa
#include <iostream> using namespace std; int main(){
// PROGRAMA COM ERRO NAO COMPILA !!!!int *ptr_inteiro;double valor;
valor = 345.76;ptr_inteiro = &valor;
cout << *ptr_inteiro << endl;}
ERRO !!!
ALGORITMOS E ESTRUTURA DE DADOS – Prof. Thomás da Costa
Atribuição de valores:
Podemos atribuir um valor diretamente para um ponteiro. Para isso utilizamos o operador * antes do nome da variável do tipo ponteiro.
*ptr = 999;
Variável do tipo ponteiro
Atribuindo um valor
Ponteiros
PONTEIROS, VETORES E MATRIZES
ALGORITMOS E ESTRUTURA DE DADOS – Prof. Thomás da Costa
#include <iostream> using namespace std; int main(){
int *ptr;int x;
ptr = &x;*ptr = 999;
cout << &x << endl;cout << ptr << endl;cout << *ptr << endl;
}
xptr
0x23fe440x23fe48
0x23fe48 0x23fe440x23fe44 999
11
2
2 33
4
4
ALGORITMOS E ESTRUTURA DE DADOS – Prof. Thomás da Costa
PonteirosResumo:
• Um ponteiro armazena uma posição de memória.• Esta posição de memória é referente a um valor.• Atribuição de ponteiros deve acontecer se for do mesmo tipo.• Existem dois tipo de operadores unários para trabalhar com ponteiros.• O operador & retornar o endereço de memória da variável.• O operador * é utilizado para declarar um ponteiro e para retornar o valor.• Vamos utilizar bastante na disciplina de Estrutura de Dados.
PONTEIROS, VETORES E MATRIZES
ALGORITMOS E ESTRUTURA DE DADOS – Prof. Thomás da Costa
VETORES
PONTEIROS, VETORES E MATRIZES
ALGORITMOS E ESTRUTURA DE DADOS – Prof. Thomás da Costa
Exemplo:#include <iostream>#include <string.h>
using namespace std;
int main(){
int k[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; // inicializando um vetor
for (int i=9;i>=0;i--){
k[i] = i;cout << k[i] << "\n";
}
char nome1[10] = "João"; // uma stringchar nome2[10] = "Maria";strcat(nome2, " das Graças"); // concatena duas stringscout << "Nome1, Nome2: " << nome1 << "," << nome2 << "\n";cout << "Tamanho do Nome1: " << strlen(nome1) << "\n"; // tamanho de uma stringcout << "Tamanho do Nome2: " << strlen(nome2) << "\n";cout << "Comparando:" << strcmp(nome1, nome2) << "\n"; // compara duas strings
char usuario[100];gets(usuario);// lê a string do tecladocout << "Usuário: " << usuario;
}
Criando um vetor com 10 posições
Inicializando um vetor
Atribuindo um valor na posição
Ler um vetor de char pelo teclado
Vetores
PONTEIROS, VETORES E MATRIZES
ALGORITMOS E ESTRUTURA DE DADOS – Prof. Thomás da Costa
MATRIZES
PONTEIROS, VETORES E MATRIZES
ALGORITMOS E ESTRUTURA DE DADOS – Prof. Thomás da Costa
Matrizes
São vetores que possuem duas ou mais dimensões para armazenar valores. Uma matriz de duas dimensões, possui um comportamento semelhante ao de uma tabela com linhas e colunas.
O que é:
PONTEIROS, VETORES E MATRIZES
ALGORITMOS E ESTRUTURA DE DADOS – Prof. Thomás da Costa
MatrizesExemplo:
int valor[4][4] = {
{0, 0 ,0 ,0},
{0, 1 ,1 ,0},
{0, 1 ,1 ,0},
{0, 0 ,0 ,0}
};
Declaração de uma matriz
PONTEIROS, VETORES E MATRIZES
ALGORITMOS E ESTRUTURA DE DADOS – Prof. Thomás da Costa
#include <iostream> using namespace std; int main(){
int valor[4][4] = { {0, 0 ,0 ,0},{0, 1 ,1 ,0},{0, 1 ,1 ,0},{0, 0 ,0 ,0}
};
for (int i=0;i<=3;i++){
for (int j=0;j<=3;j++){
cout << valor[i][j];}cout << endl;
}
}
ALGORITMOS E ESTRUTURA DE DADOS – Prof. Thomás da Costa
Matrizes
Podemos atribuir valores para uma posição de uma matriz utilizando diretamente os seus índices.
Atribuição de Valor:
valor[0][2] = 22;
PONTEIROS, VETORES E MATRIZES
ALGORITMOS E ESTRUTURA DE DADOS – Prof. Thomás da Costa
Matrizes
• Sempre usar com sabedoria !!!• Quanto maior o tamanho da matriz, maior a quantidade de memória
ocupada.• A memória da matriz é de alocação estática.• Podemos declarar qualquer tipo de matriz.• Matrizes podem possuir várias dimensões, mas cuidado ao utilizar.• Não se esqueça: computador tem memória limitada !!! • Para acessar as informações de uma matriz vamos precisar sempre de dois
índices.
Detalhes:
PONTEIROS, VETORES E MATRIZES
Obrigado !!!
ANHANGUERA – 2016.1