O documento apresenta os conceitos de ponteiros, vetores e matrizes em C++. Explica que ponteiros armazenam endereços de memória e utilizam os operadores & e * para declarar e acessar valores. Vetores são listas unidimensionais que podem armazenar vários elementos do mesmo tipo. Matrizes são vetores multidimensionais que representam tabelas com linhas e colunas.
1. ANHANGUERA – 2016.1
ALGORITMOS E ESTRUTURA DE DADOS
AULA 05 – PONTEIROS, VETORES E MATRIZES
Prof. Thomás da Costa
thomascosta@aedu.com
2. ALGORITMOS E ESTRUTURA DE DADOS – Prof. Thomás da Costa
PONTEIROS, VETORES E MATRIZES
PONTEIROS
3. 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++.
Ponteiros
O que é?:
4. ALGORITMOS E ESTRUTURA DE DADOS – Prof. Thomás da Costa
Para operação com ponteiros, utilizamos dois operadores unários:
Ponteiros
Operadores:
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
5. 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
6. 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
7. ALGORITMOS E ESTRUTURA DE DADOS – Prof. Thomás da Costa
Ponteiros
Declaraçã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
8. 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
9. ALGORITMOS E ESTRUTURA DE DADOS – Prof. Thomás da Costa
Ponteiros
Mais 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
10. 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
11. ALGORITMOS E ESTRUTURA DE DADOS – Prof. Thomás da Costa
Ponteiros
Importante:
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
12. 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 !!!
13. 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
14. 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
15. ALGORITMOS E ESTRUTURA DE DADOS – Prof. Thomás da Costa
Ponteiros
Resumo:
• 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
16. ALGORITMOS E ESTRUTURA DE DADOS – Prof. Thomás da Costa
VETORES
PONTEIROS, VETORES E MATRIZES
17. 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 string
char nome2[10] = "Maria";
strcat(nome2, " das Graças"); // concatena duas strings
cout << "Nome1, Nome2: " << nome1 << "," << nome2 << "n";
cout << "Tamanho do Nome1: " << strlen(nome1) << "n"; // tamanho de uma string
cout << "Tamanho do Nome2: " << strlen(nome2) << "n";
cout << "Comparando:" << strcmp(nome1, nome2) << "n"; // compara duas strings
char usuario[100];
gets(usuario);// lê a string do teclado
cout << "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
18. ALGORITMOS E ESTRUTURA DE DADOS – Prof. Thomás da Costa
MATRIZES
PONTEIROS, VETORES E MATRIZES
19. 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
20. ALGORITMOS E ESTRUTURA DE DADOS – Prof. Thomás da Costa
Matrizes
Exemplo:
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
21. 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;
}
}
22. 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
23. 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