sábado, 8 de julio de 2017

Aritmética De Apuntadores

La aritmética de punteros se limita a suma, resta, comparación y asignación. Las operaciones aritméticas en los punteros de tipoX (punteros-a-tipoX) tienen automáticamente en cuenta el tamaño real de tipoX. Es decir, el número de bytes necesario para almacenar un objeto tipoX [2]. Por ejemplo, suponiendo una matriz de double con 100 elementos, si ptr es un puntero a dicha matriz, la sentencia ptr++; supone incrementar el Rvalue de ptr en 6.400 bits, porque el tamaño de la matriz es precisamente 100x64 bits.
Nota: no confundir el puntero-a-matriz con un puntero a su primer elemento (que aquí sería puntero-a-double).
La aritmética realizada internamente en los punteros depende del modelo de memoria en uso y de la presencia de cualquier modificador superpuesto.
Las operaciones que implican dos punteros exigen que sean del mismo tipo o se realice previamente un modelado apropiado .

Sean ptr1, ptr2 punteros a objetos del mismo tipo, y n un tipo entero o una enumeración; las operaciones permitidas y los resultados obtenidos con ellas son:


La comparación de punteros solo tiene sentido entre punteros a elementos de la misma matriz; en estas condiciones los operadores relacionales ( 4.9.12): ==,  !=, <,  >, <=, >=, funcionan correctamente.
Cuando se crea un arreglo unidimensional o de 'n' dimensiones, todos los elementos de dicho arreglo se acomodan en la memoria de manera adjunta o lineal, es decir, se puede desplazar por el arreglo moviéndonos de una dirección de memoria a otra con un apuntador, y simplemente sumando o restando unidades al apuntador se logra que dicho apuntador pueda recorrer el arreglo.
En la siguiente imagen se puede ver como se almacena un arreglo y como apuntar a él:

Como se puede observar todos los elementos del arreglo están adjuntos entre ellos, si el arreglo fuera bi-dimensional sería lo mismo.






No hay comentarios:

Publicar un comentario