Revisão de matrizes
Antes de começarmos seriamente nesta lição, vamos parar um pouco para recapitular as informações importantes sobre matrizes. Uma matriz é um único elemento com vários componentes. Pense nisso como uma lista de nomes, números de telefone ou outras informações. Você pode pensar em cada item da lista como um balde dentro dessa lista. Lembre-se, os intervalos de um array começam a contar com zero! Portanto, o primeiro intervalo de qualquer matriz é 0, o segundo 1 e assim por diante.
Aqui está uma matriz de inteiros básica:
#include <stdio.h>
#include <iostream>
usando o namespace std;
const em MAXIMUM = 5;
int main () {
int var [MAXIMUM] = {3, 18, 12, 32, 16)};
for (int i = 0; i <MAXIMUM; i ++) {
cout << "Variável [" << i << & quot] = "
cout << var [i] << endl;
}
return 0;
}
O resultado seria:
![]() |
Esse tipo de array é comum e funciona bem em muitas situações. No entanto, uma vez que o array é definido, é muito difícil mudar. E se você quiser adicionar novos valores ao array ou mudar a ordem? Requer muita programação adicional e frustração devido à forma como o array foi escrito. Qual é a solução? Crie uma matriz de ponteiros. Eles apontam para os itens da matriz. Então, tudo o que temos a fazer é trocar, adicionar, alterar, modificar os ponteiros!
Array of Pointers
Um ponteiro contém um endereço para algo. É como um endereço porque aponta para um valor específico. Verifique o diagrama a seguir mostrando um ponteiro payCode apontando para um valor de 507.
![]() |
Para declarar um ponteiro, usamos o asterisco na frente do nome da variável, como a seguir:
int * ptr [MÁXIMO];
Antes de refazermos o código anterior, precisamos examinar mais de perto como estamos trabalhando com os ponteiros e os endereços. Quando processamos o array, há uma linha extra de código que atribui o endereço / ponteiro à nossa variável original. Omitir esta etapa é o erro mais comum no código do ponteiro.
ptr [i] = & myvar [i];
Agora vamos dar uma olhada no código completo. Ainda é muito semelhante à execução original, mas estamos usando e exibindo os ponteiros em vez do valor direto de cada intervalo.
#include <stdio.h>
#include <iostream>
usando o namespace std;
const em MAXIMUM = 5;
int main () {
int var [MAXIMUM] = {3, 18, 12, 32, 16)};
int * ptr [MÁXIMO];
para (int i = 0; i <MÁXIMO; i ++) {
ptr [i] = & myVar [i];
// use o endereço
}
para (int i = 0; i <MAXIMUM; i ++) {
"Valor de myvar [" << i << "] ="
}
}
Quando o programa é executado, a seguinte saída é exibida:
![]() |
Valores de reordenamento
Digamos que esses valores sejam classificações ou pontuações de testes, e queremos reordená-los. Em um array tradicional, isso exigiria muita programação extra (e provavelmente criaria uma ou duas dores de cabeça). Uma série de ponteiros nos permite trocar e reordenar sem tanta frustração. Lembre-se de que você está movendo o ponteiro, não os valores reais dos dados!
Vamos revisar o código ao qual atribuímos o endereço:
prt [i] = & myvar [i];
Agora você pode ter valores diferentes lá. O intervalo atual da variável ptr pode apontar para um endereço totalmente diferente:
prt [i] = & myvar [i + 7];
Este é um exemplo muito simples. Lembre-se de que o poder dos ponteiros é que você não precisa mexer nos valores subjacentes ou em sua ordem.
Personagens
Você também pode declarar uma matriz de ponteiros que são caracteres ou strings. Vejamos alguns tipos de dados de caracteres e ponteiros correspondentes. Primeiro, declararemos uma pequena matriz de caracteres, uma matriz de ponteiros, para armazenar 3 valores de usuário:
char * userptr [3];
Você pode então definir o valor da matriz:
char * userptr [3] = {
"EA Poe";
"Emily Bronte";
"Jane Austen";
};
Novamente, as funções de classificação e re-classificação podem ser complicadas. No entanto, sabemos que podemos usar os indicadores a nosso favor para não interferir na ordem das informações originais.
Resumo da lição
Vamos levar alguns minutos para revisar todas as informações importantes que aprendemos nesta lição sobre arrays de ponteiros em C ++. Em primeiro lugar, recapitulamos as informações importantes que precisávamos lembrar sobre arrays , que são variáveis com vários elementos ou buckets, enquanto um ponteiro é um endereço ou referência a algo. Depois de criar um array, é muito difícil trocar, adicionar ou alterar coisas dentro dele. No entanto, podemos criar uma matriz de ponteiros e apenas inverter os ponteiros. Uma matriz de ponteiros também pode ser criada usando cadeias de caracteres ou caracteres. Novamente, eles podem ser reclassificados ou alterados sem alterar os valores dos dados originais ou a ordem de classificação.