Escolar Documentos
Profissional Documentos
Cultura Documentos
1
Ponteiros
Objetivos:
Aprender a utilizar a estrutura básica de ponteiros.
2
Ponteiros:
Um ponteiro ou apontador é um tipo de dado de uma linguagem
de programação cujo valor se refere diretamente a um outro valor
alocado em outra área da memória, através de seu endereço.
4
Ponteiros – Operadores & e *:
O segundo operador é * , que é o complemento de &. O * é um operador
unário que devolve o valor da variável localizada no endereço que o
segue.
Por exemplo, se m contém o endereço da variável count:
q = *m; coloca o valor de count em q.
O operador * tem como significado no endereço de.
5
Ponteiros – Operadores & e *:
6
Ponteiros – Operadores & e *:
Exemplo:
Para criar um ponteiro ele tem que ser do mesmo tipo da variável que
ele aponta.
- int *pt;
Como relacionar a variável num ao ponteiro:
- pt = #
Quando for colocado: cout<< pt; o que irá aparecer?
7
Ponteiros – Operadores & e *:
cout<<*pt;
8
2. Operadores de ponteiro
Considerando as declarações:
a instrução
9
2. Operadores de ponteiro
10
A instrução
11
Um ponteiro desreferenciado também pode ser utilizado no
lado esquerdo de uma instrução de atribuição, como em
*yPtr = 9;
que atribuiria 9 a y.
12
Ponteiros – exemplo
#include <iostream>
using namespace std;
int main()
{
int num; // num é um inteiro
int *pt; // pt é um ponteiro int * -- para um inteiro
cout << "O endereco de num eh " << &num<< "\nO valor de pt eh " << pt;
cout << "\n\nO valor de num eh " << num << "\nO valor de *pt eh " << *pt;
cout << "\n\nMostrando que * e & sao inversos" << " um do outro.\n&*pt = " << &*pt
<< "\n*&pt = " << *&pt << endl;
system("pause");
return 0; // indica terminação bem-sucedida
} // fim de main
13
Ponteiros – exemplo
#include <iostream>
#include <string>
using namespace std;
int main()
{
pt=&curso;
cout<<"valor do ponteiro:"<<pt<<"\n";
cout<<"endereco da variavel curso :"<<&curso<<"\n";
cout<<"conteudo do ponteiro:"<<*pt<<"\n";
cout<<"conteudo da variavel curso :"<<curso<<"\n";
*pt="Automacao";
cout<<"conteudo do ponteiro:"<<*pt<<"\n";
cout<<"conteudo da variavel curso :"<<curso<<"\n";
system("pause");
return 0; 14
}
Ponteiros – exercícios
15
Passando argumentos para funções com ponteiros
16
Passando argumentos para funções com ponteiros
17
Passando argumentos para funções com ponteiros
Isso por sua vez pode ser utilizado para modificar o valor da
variável naquela localização na memória do chamador.
int main()
{
int number = 5;
cout << “O valor original ne number é “ << number;
return 0;
} // fim de main
20
Passando argumentos para funções com ponteiros
int main()
{
int number = 5;
cout << “O valor original ne number é “ << number;
cubeByReference( &number );
cout << “\nO novo valor de number é “ << number
<< endl;
21
Passando argumentos para funções com ponteiros
return 0;
} // fim de main
23
Passando argumentos para funções com ponteiros
24
Passando argumentos para funções com ponteiros
25
Passando argumentos para funções com ponteiros
27
Utilizando const com ponteiros
Esse ponteiro pode ser utilizado para receber uma string ter-
minada por caractere nulo em uma função que altera o valor
de ponteiro para processar (e, possivelmente, modificar) cada
caractere na string.
28
Utilizando const com ponteiros
int main()
{
char phrase[] = “caracteres e R$32,98”;
29
Utilizando const com ponteiros
31
Utilizando const com ponteiros
int main()
{
int x, y;
32
Classificação por seleção
#include <iostream>
using std::cout;
using std::endl;
#include <iomanip>
using std::setw;
int main()
{
const int arraySize = 10;
int a[ arraySize ] = { 2, 6, 4, 8, 10, 12, 89, 68, 45, 37 };
33
5. Classificação por seleção
Classificação por seleção
36
Operadores sizeof
#include <iostream>
using std::cout;
using std::endl;
int main()
{
double array[ 20 ]; // 20 doubles; o que ocupa 160 bytes
38
Operadores sizeof
39
Operadores sizeof
double realArray[ 22 ];
40
Operadores sizeof
41
Expressões e Aritmética de Ponteiro
42
Expressões
7. Expressões e Aritmética
e Aritmética de Ponteiro
de Ponteiro
int *vPtr = v;
int *vPtr = &v[ 0 ];
vPtr += 2;
44
Expressões
7. Expressões e Aritmética
e Aritmética de Ponteiro
de Ponteiro
++vPtr;
vPtr++;
--vPtr;
vPtr--;
x = v2Ptr - vPtr;
46
Expressões
7. Expressões e Aritmética
e Aritmética de Ponteiro
de Ponteiro
int main()
{
int *pt;
int vetor[10];
pt=&vetor[0];
cout<<"\n"<<pt<<endl;
pt=&vetor[1];
cout<<"\n"<<pt<<endl;
pt=&vetor[2];
cout<<"\n"<<pt<<endl;
system("pause");
return 0;
}
50
Ponteiros – exemplo
#include <iostream>
#include <string>
using namespace std;
int main()
{
int *pt;
int vetor[10];
pt=&vetor[0];
cout<<"\n"<<pt<<endl;
*(pt++);
cout<<"\n"<<pt<<endl;
*(pt++);
cout<<"\n"<<pt<<endl;
system("pause");
return 0;
}
51
Ponteiros – exemplo
52
Relacionamento entre Ponteiros e Arrays
int main()
{
int b[] = { 10, 20, 30, 40 }; // cria o array b de 4 elementos
int *bPtr = b; // configura bPtr para apontar para o array b
55
Relacionamento entre Ponteiros e Arrays
int main()
{
char string1[ 10 ];
char *string2 = “Hello”;
char string3[ 10 ];
char string4[] = “Good Bye”;
56
Relacionamento entre Ponteiros e Arrays
57
Relacionamento entre Ponteiros e Arrays
string1 = Hello
string2 = Good Bye
58
Arrays de Ponteiros
59
Arrays de Ponteiros
60
Arrays de Ponteiros
Portanto, mesmo que o array suit tenha tamanho fixo, ele for-
nece acesso a strings de caractere de qualquer comprimento.
61
Embaralhamento e Distribuição de Cartas
// DeckOfCards.h
// Definição da classe DeckOfCards que representa
// um baralho.
62
Embaralhamento e Distribuição de Cartas
// main.cpp
// Programa de embaralhamento e distribuição de cartas.
#include “DeckOfCards.h” // Classe DeckOfCards
int main()
{
DeckOfCards deckOfCards; // cria objeto DeckOfCards
63
Embaralhamento e Distribuição de Cartas
// DeckOfCards.cpp
// Definições de função-membro para a classe DeckOfCards
// que simula o embaralhamento e distribuição de um baralho.
#include <iostream>
using std::cout;
using std::left;
using std::right;
#include <iomanip>
using std::setw;
64
Embaralhamento e Distribuição de Cartas
// construtor
DeckOfCards::DeckOfCards() {
for ( int row = 0; row <= 3; row++ ) {
for ( int column = 0; column <= 12; column++ ) {
deck[ row ][ column ] = 0;
} // fim do for interno
} // fim do for externo
void DeckOfCards::shuffle() {
int row; // representa o valor do naipe da carta
int column; // representa o valor da face da carta
void DeckOfCards::deal() {
static const char *suit[ 4 ] =
{ “Ouros”, “Copas”, “Paus”, “Espadas” };
67
Embaralhamento e Distribuição de Cartas
68
Ponteiros de Função
#include <iomanip>
using std::setw;
void selectionSort( int [], const int, bool (*)( int, int ) );
void swap( int * const, int * const );
bool ascending( int, int ); // implementa ordem crescente
bool descending( int, int ); // implementa ordem decrescente
70
11. Ponteiros de Função de Função
Ponteiros
int main()
{
const int arraySize = 10;
int order; // 1 = crescente, 2 = decrescente
int counter; // índice do array
int a[ arraySize ] = { 2, 6, 4, 8, 10, 12, 89, 68, 45, 37 };
71
11. Ponteiros de Função de Função
Ponteiros
if ( order == 1 ) {
selectionSort( a, arraySize, ascending );
cout << “\nData items in ascending order\n”;
} // fim do if
else {
selectionSort( a, arraySize, descending );
cout << “\nData items in descending order\n”;
} // fim da parte else do if...else
int main()
{
void (*f[ 3 ])( int ) = { function0, function1, function2 };
int choice;
77
11. Ponteiros de Função de Função
Ponteiros
78
11. Ponteiros de Função de Função
Ponteiros
79
Função para somar valores a uma determinada variável
80
Função para somar valores a uma determinada variável
81
Função para somar valores a uma determinada variável
82
Função para somar valores a uma determinada variável
Valor correto
83
Função Array
84
Função Array
85
Processamento de string Baseada em Ponteiro
87
Processamento de string Baseada em Ponteiro
88
Processamento de string Baseada em Ponteiro
Os literais string:
char sentence[ 80 ];
cin.getline( sentence, 80, ‘\n’ );
\\ ou cin.getline( sentence, 80 );, pois ‘\n’ é tido como padrão
• comparar strings;
• pesquisar por caracteres e outras strings em strings;
• tokenizar strings (separá-las em partes lógicas como as
palavras separadas em uma frase); e
• determinar seu comprimento.
92
Processamento de string Baseada em Ponteiro
93
Processamento de string Baseada em Ponteiro
int main()
{
char x[] = “Happy Birthday to You”; // comprimento: 21
char y[ 25 ];
char z[ 15 ];
94
Processamento de string Baseada em Ponteiro
95
Processamento de string Baseada em Ponteiro
int main()
{
char s1[ 20 ] = “Happy ”; // comprimento 6
char s2[] = “New Year ”; // comprimento 9
char s3[ 40 ] = “”;
96
Processamento de string Baseada em Ponteiro
int main()
{
char *s1 = “Happy New Year”;
char *s2 = “Happy New Year”;
char *s3 = “Happy Holidays”;
98
Processamento de string Baseada em Ponteiro
99
Processamento de string Baseada em Ponteiro
// Utilizando strtok.
#include <iostream>
using std::cout;
using std::endl;
int main()
{
char sentence[] = “This is a sentence with 7 tokens”;
char *tokenPtr;
102
Processamento de string Baseada em Ponteiro
103
Processamento de string Baseada em Ponteiro
// Utilizando strlen.
#include <iostream>
using std::cout;
using std::endl;
int main()
{
char *string1 = “abcdefghijklmnopqrstuvwxyz”;
char *string2 = “four”;
char *string3 = “Boston”;
104
Processamento de string Baseada em Ponteiro
system("pause");
return 0;
} 107
Questões
04 - Faça um programa que leia 2 valores inteiros e chame uma
função que receba estas 2 variáveis e troque o seu conteúdo, ou
seja, esta função é chamada passando duas variáveis A e B por
exemplo e, após a execução da função, A conterá o valor de B e B
terá o valor de A.
109
Bibliografia:
● DEITEL, H. M.; DEITEL, P. J. C++:Como Programar. 3. Ed.
Porto Alegre (RS): Bookman, 2001. 1098p
● SOUZA, M. A. F., GOMES, M. M.,SOARES, M. V., CONCILIO,
R., Algoritmos e Lógica de Programação, Editora Cengage
Learning, São Paulo, 2008.
●
Sergio Barbosa Villas-Boas, C / C++ e Orientação a Objetos
em Ambiente Multiplataforma
●
Apostila LINGUAGEM C/C++ UNIPAN - Faculdade de Ciências
Aplicadas de Cascavel – FACIAP Curso de Ciência da
Computação, Cascavel - PR, 2004
110