Curso de Programação em C++ Universidade Federal do Ceará Departamento de Engenharia Estrutural e Construção Civil Prof: Evandro Parente Junior Monitor: Renato Peixoto Abril/2007 Vetores e matrizes Matrizes: Array bidimensional (dois índices). Corresponde ao conceito matemático de matriz, com linhas e colunas. O primeiro índice indica a linha e o segundo a coluna. // Declaração de uma matriz com 5 linhas e 20 colunas. double matDouble[5][20]; 2 Vetores e matrizes Matrizes Supondo que 2 materiais e 3 características de cada um deles estejam armazenadas em uma matriz bidimensional, a representação seria a seguinte: Características Material 1 0 1 Material 2 0 1 2 Neste caso, para referenciar ao material 1 e sua característica 3 devemos usar nomeMatriz[0][2]. 3 Vetores e matrizes Arrays multidimensionais: Declaração tipo identificador[tamanho1][tamanho2]…[tamanhon]; // Declaração de uma matriz de inteiros com 3 dimensões int matInt[10][50][30] ; // Declaração de uma matriz de floats com 4 dimensões float matFloat[100][100][20][6] ; 4 Matrizes #include <iostream> using namespace std; int main(void) { int A[2][3]={2,3,4,5,2,0}; int B[2][3]={0,23,2,4,0,6}; int C[2][3]; // Soma as matrizes. for (int i = 0; i < 2; i++) for (int j = 0; j < 3; j++) C[i][j] = A[i][j] + B[i][j]; // Imprime o resultado. for (int i = 0; i < 2; i++) { for (int j = 0; j < 3; j++) cout << C[i][j] << " cout << "\n"; } "; return(0); } 5 Apontadores (ponteiros) São variáveis que armazenam endereços de memória. “Apontam” para o endereço de outras variáveis. Sintaxe: int *p; // p é um ponteiro para inteiro double *x; // x é um ponteiro para double Operadores associados: & retorna o endereço de uma variável. * retorna o conteúdo de um endereço de memória. 6 Apontadores (ponteiros) #include <iostream> using namespace std; int main(void) { int a = 10; // cria uma variável inteira a int *p; // cria um ponteiro para inteiro cout << "Valor inicial de a: " << a << "\n"; p = &a; *p = 8; // faz apontar para a // altera o contéudo do endereço apontado por p cout << "Valor do ponteiro p: " << p << "\n"; cout << "Conteudo do endereco apontado por p: " << *p << "\n"; cout << "Valor final de a: " << a << "\n"; return(0); } Valor inicial de a: 10 Valor do ponteiro p: 0x22ff74 Conteudo do endereco apontado por p: 8 Valor final de a: 8 7 Apontadores (ponteiros) Operações aritméticas: Igualdade p1 = p2 // p1 aponta para o mesmo endereço de p2 *p1 = *p2 // copia o conteúdo de p2 para p1 Incremento e decremento Usandos para percorrer arrays. p++; // p = p + sizeof(tipo_de_p) p--; // p = p - sizeof(tipo_de_p) Na prática p++ faz p apontar para o próximo elemento do array. 8 Apontadores (ponteiros) Aplicações mais importantes: Alocação dinâmica de memória. Passagem de parâmetros para funções. Alocação dinâmica de memória: Utilizada quando as dimensões de um array são conhecidas apenas durante a execução. Criação de estruturas de dados mais complexas: Pilhas, filas, listas, árvores, ... Utilização de classes (herança/polimorfismo). 9