Carregar apresentação
A apresentação está carregando. Por favor, espere
PublicouLorena Machado Alterado mais de 10 anos atrás
1
1 Aula 4 Ponteiros
2
2003/2004 Programação Orientada para Objectos 2 Instâncias de um programa C++ int i = 10; Nome: i Tipo: int Valor: 10
3
2003/2004 Programação Orientada para Objectos 3 O que é a memória? Sequência de bytes com números sucessivos Números são endereços Bytes são a unidade básica de memória e têm 8 bits Também denominados de octetos.
4
2003/2004 Programação Orientada para Objectos 4 Memória 10 i : int 12131415
5
2003/2004 Programação Orientada para Objectos 5 Ponteiros Guardam endereços de variáveis Ponteiro para int: int* p; Contém lixo! p guarda o endereço de um int.
6
2003/2004 Programação Orientada para Objectos 6 Operações com ponteiros Operador endereço ( & ): int* p = &i; 10 i : int 12 1314 15 12 p : int* 242526 27
7
2003/2004 Programação Orientada para Objectos 7 Operações com ponteiros Operador endereço ( & ): int* p = &i; Operador conteúdo ( * ): cout << *p << endl; *p = 20; 10
8
2003/2004 Programação Orientada para Objectos 8 Memória 20 i : int 12 1314 15 12 p : int* 242526 27
9
2003/2004 Programação Orientada para Objectos 9 Contextos… int i = 10; int& j = i; int* p = &i; int k = *p; Define uma referência para um int. Define um ponteiro para um int. Operador que devolve o endereço de i. Operador que devolve o conteúdo de p.
10
2003/2004 Programação Orientada para Objectos 10 Ponteiros e matrizes int m[5] = {6, 7, 8, 9, 10}; int* p = &m[0]; p = p + 1; *p = 20;
11
2003/2004 Programação Orientada para Objectos 11 Memória 202428323652 6 m[0]: int 7 m[1]: int 8 m[2]: int 9 m[3]: int 10 m[4]: int 20 p: int*
12
2003/2004 Programação Orientada para Objectos 12 Ponteiros e matrizes int m[5] = {6, 7, 8, 9, 10}; int* p = &m[0]; p = p + 1; *p = 20;
13
2003/2004 Programação Orientada para Objectos 13 Memória 202428323652 6 m[0]: int 7 m[1]: int 8 m[2]: int 9 m[3]: int 10 m[4]: int 24 p: int*
14
2003/2004 Programação Orientada para Objectos 14 Ponteiros e matrizes int m[5] = {6, 7, 8, 9, 10}; int* p = &m[0]; p = p + 1; *p = 20;
15
2003/2004 Programação Orientada para Objectos 15 Memória 202428323652 6 m[0]: int 20 m[1]: int 8 m[2]: int 9 m[3]: int 10 m[4]: int 24 p: int*
16
2003/2004 Programação Orientada para Objectos 16 Indexação de matrizes X[I] é o mesmo que *(X + I) int m[5]; m[2] = 10; é interpretado como int m[5]; *(m + 2) = 10;
17
2003/2004 Programação Orientada para Objectos 17 Matrizes em expressões Se uma matriz ocorrer numa expressão é convertida num ponteiro para o primeiro elemento: int m[5]; int* p = m; É o mesmo que int m[5]; int* p = &m[0];
18
2003/2004 Programação Orientada para Objectos 18 Matrizes como argumento (I) int soma(int const m[], int n) { int soma = 0; for(int i = 0; i != n; ++i) soma += m[i]; return soma; } int main() { int matriz[] = {2, 4, 6, 8}; cout << soma(matriz, 4) << endl; }
19
2003/2004 Programação Orientada para Objectos 19 Matrizes como argumento (II) cout << soma(matriz, 4) << endl; é o mesmo que cout << soma(&matriz[0], 4) << endl; ou ainda int* p = matriz; // ou &matriz[0] cout << soma(p, 4) << endl;
20
2003/2004 Programação Orientada para Objectos 20 Matrizes como argumento (III) int soma(int const m[], int n); é o mesmo que int soma(int const* m, int n);
21
2003/2004 Programação Orientada para Objectos 21 Matrizes como argumento (IV) int soma(int const* m, int n) { int soma = 0; for(int i = 0; i != n; ++i) soma += m[i]; return soma; } int main() { int matriz[] = {2, 4, 6, 8}; cout << soma(matriz, 4) << endl; }
22
2003/2004 Programação Orientada para Objectos 22 Matrizes multidimensionais int m[3][2]; int (*p)[2] = m; ++p; p[0][0] = 10; 10 m: int[3][2]
23
2003/2004 Programação Orientada para Objectos 23 Aluno class Aluno { public: Aluno(string const& nome =, int número = 0); string const& nome() const; int número() const; private: string nome_; int número_; }; Aluno::Aluno(string const& nome, int const número) : nome_(nome), número_(número) {} string const& Aluno::nome() const { return nome_; } int Aluno::número() const { return número_; }
24
2003/2004 Programação Orientada para Objectos 24 Ponteiros e classes (I) int main() { Aluno a(Xico, 12345); Aluno* p = &a; cout << (*p).nome() << endl << (*p).número() << endl; }
25
2003/2004 Programação Orientada para Objectos 25 Ponteiros e classes (II) Em vez de cout << (*p).nome() << endl << (*p).número() << endl; usar abreviaura cout nome() << endl número() << endl;
26
2003/2004 Programação Orientada para Objectos 26 Aula 4: Sumário Instâncias de um programa C++: Memória Unidade básica de memória Endereço Ponteiros Definição Inicialização Acesso indirecto a variáveis Símbolos * e & em declarações e expressões Relação com matrizes Relação com classes
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.