Pointer vs Array
Un puntero es un tipo de datos que contiene una referencia a una ubicación de memoria (i.mi. 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 elementos de acceso 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 contiene una referencia a una ubicación de memoria. Acceder a los datos almacenados en la ubicación de memoria a la que se hace referencia el puntero se llama Derferencing. Al realizar operaciones repetitivas, como atravesar árboles/cuerdas, buscar en la mesa, etc., usar punteros mejoraría el rendimiento. Esto se debe a que la desferenciación y los consejos de copia es más barato que copiar y acceder a los datos señalados 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.
Que es una matriz?
Se muestra en la Figura 1, se utiliza un código que se usa típicamente para declarar y asignar valores a una matriz. La Figura 2 muestra cómo se vería una matriz en la memoria.
valores 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 almacenada en la memoria
El código anterior define una matriz que puede almacenar 5 enteros y se accede a ellos utilizando índices 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, su tamaño es fijo. Entonces, si no está seguro del 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 usar menos número de elementos de los que hemos asignado. Entonces, una cantidad considerable de memoria en realidad se desperdicia. 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 las matrices son la estructura de datos más utilizada para almacenar una recopilación de elementos. En el lenguaje de programación C, la indexación de matriz se realiza utilizando aritmética de puntero (i.mi. El elemento ésimo de la matriz x sería equivalente a *(x+i)). Por lo tanto, en c, un conjunto de punteros que apuntan a un conjunto de ubicaciones de memoria que son consecutivas, se puede considerar como una matriz. Además, hay una diferencia en cómo funciona el operador sizeOf en punteros y matrices. Cuando se aplica a una matriz, SizeOf Operator devolverá el tamaño completo de la matriz, mientras que cuando se aplica a un puntero, devolvería el tamaño del puntero.