Dereferenciacion de Apuntadores y Asignación de valores
La dereferenciacion permite la manipulación de los datos contenidos en la dirección de
memoria guardada en el apuntador. El apuntador guarda una dirección de memoria. Al de
referenciar un apuntador, podemos modificar los datos o valores contenidos en esa dirección de
memoria. El operador unario , es utilizado para de referenciar a los apuntadores.
*pt1 =*pt1 + 2;
Esta instrucción suma dos al valor apuntado por pt1. Es decir, la instrucción suma dos a;
contenido de la dirección de memoria almacenada por pt1. Entonces, a partir del programa
principal, pt1 contiene la dirección de j. La variable "j" fue inicializada con 1. El efecto de la
instrucción mostrada arriba es sumar 2 a j.
El contenido de la dirección almacenada en un apuntador, puede ser asignado a otro
apuntador o a otra variable
*pt2 = *pt1;
/* assigns the contents of the memory pointed to by pt1 */
/* to the contents of the memory pointer to by pt2; */
k = *pt2;
/* assigns the contents of the address pointer to by pt2 to k. */
Aritmética de Apuntadores
Parte del poder de los apuntadores proviene de la habilidad de hacer aritmética en los
apuntadores mismos. Los apuntadores pueden ser incrementados, decrementados y manipulados
utilizando expresiones aritméticas. Consideremos el apuntador "pt3" y el arreglo de float "values"
declarados en el programa principal mostrado anteriormente:
pt3 = &values[0];
/* The address of the first element of "values" is stored in pt3*/
pt3++;
/* pt3 now contains the address of the second element of values */
*pt3 = 3.1415927;
/* The second element of values now has pie (actually pi)*/
pt3 += 25;
/* pt3 now points to the 27th element of values */
*pt3 = 2.22222;
/ The 27th element of values is now 2.22222 */
pt3 = values;
/*pt3 points to the start of values, now */
for (ii = 0; ii < 100; ii++)
{
*pt3++ = 37.0; /* This sets the entire array to 37.0 */
}
pt3 = &values[0];
/* pt3 contains the address of the first element of values */
pt4 = &results[0];
/* pt4 contains the address of the first element of results */
for (ii=0; ii < 100; ii++)
{
*pt4 = *pt3;
/* The contents of the address contained in pt3 are assigned to
the contents of the address contained in pt4 */
pt4++;
pt3++;
}