Puntero vs matriz
Un puntero es un tipo de datos que contiene una referencia a una ubicación de memoria (es decir, una variable de puntero almacena una dirección de una ubicación de memoria en la que se almacenan algunos datos). Las matrices son la estructura de datos más utilizada para almacenar una colección de elementos. La mayoría de los lenguajes de programación proporcionan métodos para declarar fácilmente matrices y acceder a elementos en las matrices.
¿Qué es un puntero?
Un puntero es un tipo de datos que almacena una dirección de una ubicación de memoria en la que se almacenan algunos datos. En otras palabras, un puntero tiene una referencia a una ubicación de memoria. El acceso a los datos almacenados en la ubicación de la memoria a la que hace referencia el puntero se denomina desreferenciar. Al realizar operaciones repetitivas como atravesar árboles / cadenas, búsquedas en tablas, etc., el uso de punteros mejoraría el rendimiento. Esto se debe a que desreferenciar y copiar punteros es más barato que copiar y acceder a los datos apuntados por los punteros. Un puntero nulo es un puntero que no apunta a nada. En Java, acceder a un puntero nulo generaría una excepción llamada NullPointerException.
¿Qué es una matriz?
En la figura 1, se muestra un fragmento de código que se usa normalmente para declarar y asignar valores a una matriz. La Figura 2 muestra cómo se vería una matriz en la memoria.
valores [0] = 100; valores [1] = 101; valores [2] = 102; valores [3] = 103; valores [4] = 104; |
Figura 1: Código para declarar y asignar valores a una matriz
100 | 101 | 102 | 103 | 104 |
Índice: 0 | 1 | 2 | 3 | 4 |
Figura 2: Matriz almacenada en la memoria
El código anterior define una matriz que puede almacenar 5 enteros y se accede a ellos usando índices de 0 a 4. Una propiedad importante de una matriz es que, toda la matriz se asigna como un solo bloque de memoria y cada elemento obtiene su propio espacio en la matriz.. Una vez que se define una matriz, se fija su tamaño. Por lo tanto, si no está seguro del tamaño de la matriz en el momento de la compilación, tendrá que definir una matriz lo suficientemente grande como para estar seguro. Pero, la mayoría de las veces, usaremos menos elementos de los que hemos asignado. Por tanto, se desperdicia una cantidad considerable de memoria. Por otro lado, si la "matriz lo suficientemente grande" no es realmente lo suficientemente grande, el programa se bloqueará.
¿Cuál es la diferencia entre punteros y matrices?
Un puntero es un tipo de datos que almacena una dirección de una ubicación de memoria en la que se almacenan algunos datos, mientras que las matrices son la estructura de datos más utilizada para almacenar una colección de elementos. En el lenguaje de programación C, la indexación de matrices se realiza mediante aritmética de punteros (es decir, el i-ésimo elemento de la matriz x sería equivalente a * (x + i)). Por lo tanto, en C, el conjunto de punteros que apuntan a un conjunto de ubicaciones de memoria que son consecutivas se puede considerar como una matriz. Además, existe una diferencia en la forma en que opera el operador sizeof en punteros y matrices. Cuando se aplica a una matriz, el operador sizeof devolverá el tamaño completo de la matriz, mientras que cuando se aplica a un puntero, devolverá solo el tamaño del puntero.