A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

1 Aula 4 Ponteiros. 2003/2004 Programação Orientada para Objectos 2 Instâncias de um programa C++ int i = 10; Nome: i Tipo: int Valor: 10.

Apresentações semelhantes


Apresentação em tema: "1 Aula 4 Ponteiros. 2003/2004 Programação Orientada para Objectos 2 Instâncias de um programa C++ int i = 10; Nome: i Tipo: int Valor: 10."— Transcrição da apresentação:

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


Carregar ppt "1 Aula 4 Ponteiros. 2003/2004 Programação Orientada para Objectos 2 Instâncias de um programa C++ int i = 10; Nome: i Tipo: int Valor: 10."

Apresentações semelhantes


Anúncios Google