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..
Que 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 contiene 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 llama desreferenciación. Al realizar operaciones repetitivas, como atravesar árboles / cadenas, búsquedas de tablas, etc., el uso de punteros mejoraría el rendimiento. Esto se debe a que la desreferenciación y la copia de los punteros es más barata que la copia y el acceso a los datos señalados por los punteros. Un puntero nulo es un puntero que no apunta a nada. En Java, el acceso a un puntero nulo generaría una excepción llamada NullPointerException.
Que es un array?
En la figura 1, se muestra un fragmento de código que normalmente se utiliza para declarar y asignar valores a una matriz. La figura 2 muestra cómo se vería una matriz en la memoria.
valores de int [5]; 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: Array almacenado en la memoria
El código anterior define una matriz que puede almacenar 5 enteros y se accede a ellos mediante los índices 0 a 4. Una propiedad importante de una matriz es que, la matriz completa se asigna como un bloque único de memoria y cada elemento obtiene su propio espacio en la matriz . Una vez que se define una matriz, su tamaño es fijo. Entonces, si no está seguro sobre el tamaño de la matriz en el momento de la compilación, tendría que definir una matriz lo suficientemente grande como para estar en el lado seguro. Pero, la mayoría de las veces, en realidad vamos a utilizar menos elementos de los que hemos asignado. Así que una cantidad considerable de memoria se desperdicia realmente. Por otro lado, si la "matriz lo suficientemente grande" no es realmente lo suficientemente grande, el programa se bloquearía.
¿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 los Arrays 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 utilizando aritmética de punteros (es decir, el elemento i 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, puede considerarse como una matriz. Además, hay una diferencia en la forma en que opera el operador size 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.