Matriz vs ponteiro
Um ponteiro é um tipo de dados que mantém uma referência a um local de memória (ou seja, uma variável de ponteiro armazena um endereço de um local de memória no qual alguns dados são armazenados). Matrizes são a estrutura de dados mais comumente usada para armazenar uma coleção de elementos. A maioria das linguagens de programação fornece métodos para declarar facilmente matrizes e acessar elementos nas matrizes.
O que é um ponteiro?
Um ponteiro é um tipo de dados que armazena um endereço de um local de memória no qual alguns dados são armazenados. Em outras palavras, um ponteiro mantém uma referência a um local de memória. O acesso aos dados armazenados no local da memória referenciado pelo ponteiro é chamado de desreferenciação. Ao executar operações repetitivas, como atravessar árvores / seqüências de caracteres, pesquisas de tabela etc., o uso de ponteiros melhoraria o desempenho. Isso ocorre porque desreferenciar e copiar ponteiros é mais barato do que realmente copiar e acessar os dados apontados pelos ponteiros. Um ponteiro nulo é um ponteiro que não aponta para nada. Em Java, acessar um ponteiro nulo geraria uma exceção chamada NullPointerException.
O que é uma matriz?
Mostrado na figura 1, é um pedaço de código normalmente usado para declarar e atribuir valores a uma matriz. A Figura 2 mostra como uma matriz ficaria na memória.
valores int [5]; valores [0] = 100; valores [1] = 101; valores [2] = 102; valores [3] = 103; valores [4] = 104; |
Figura 1: Código para declarar e atribuir valores a uma matriz
100 | 101 | 102 | 103 | 104 |
Índice: 0 | 1 | 2 | 3 | 4 |
Figura 2: Matriz armazenada na memória
O código acima define uma matriz que pode armazenar 5 números inteiros e eles são acessados usando os índices de 0 a 4. Uma propriedade importante de uma matriz é que, toda a matriz é alocada como um único bloco de memória e cada elemento obtém seu próprio espaço na matriz . Depois que uma matriz é definida, seu tamanho é fixo. Portanto, se você não tiver certeza do tamanho da matriz em tempo de compilação, terá que definir uma matriz grande o suficiente para estar no lado seguro. Mas, na maioria das vezes, vamos realmente usar menos número de elementos do que alocamos. Portanto, uma quantidade considerável de memória é realmente desperdiçada. Por outro lado, se a “matriz grande o suficiente” não for realmente grande o suficiente, o programa falhará.
Qual é a diferença entre ponteiros e matrizes?
Um ponteiro é um tipo de dados que armazena um endereço de um local de memória no qual alguns dados são armazenados, enquanto Matrizes são a estrutura de dados mais comumente usada para armazenar uma coleção de elementos. Na linguagem de programação C, a indexação da matriz é feita usando aritmética de ponteiro (ou seja, o i-ésimo elemento da matriz x seria equivalente a * (x + i)). Portanto, em C, o conjunto de ponteiros que apontam para um conjunto de locais de memória consecutivos pode ser considerado como uma matriz. Além disso, há uma diferença em como o operador sizeof opera em ponteiros e matrizes. Quando aplicado a uma matriz, o operador sizeof retornará todo o tamanho da matriz, enquanto que, quando aplicado a um ponteiro, retornará apenas o tamanho do ponteiro..