
Al ejecutarse
un programa, las variables se almacenan en memoria, cada una en su propia
y única dirección o localidad. Las variables en general contienen un valor
odato. Por ejemplo cuando se declara:
| int
count = 5; |
El valor "5" es almacenado en memoria y puede ser accedido
usando la variable “count”.
Un apuntador es un tipo especial de variable que en lugar de contener
un valor o dato, contiene una dirección de memoria. Así como los datos pueden
modificarse cuando se trabaja con una variable normal, el valor de la dirección
almacenada en un apuntador también puede modificarse. Usualmente, la dirección
almacenada en el apuntador es la dirección correspondiente a alguna otra variable
del programa.
| int
*ptr; |
Para tomar el valor o contenido que es almacenado en la localidad
de memoriam enelapuntador, es necesario “de
referenciar” al apundator. Esto se hace usando el operador unario “*”.
| int
total; |
La mejor manera de aprender apuntadores es con la práctica y los
ejemplos. Los apuntadores son un tópico difícil. No se preocupen si el panorama
no esta completamente claro todavía.
| int
main() |
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 operadorunario
“*”, 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; |
| pt3
= &values[0]; |
Por valor: Los valores que se pasan se copian a los parámetros de la función, si el valor de un parámetro se modifica dentro de la función, no se altera su valor en el programa que lo llama.
Por Referencia: Permiten modificar dentro de la función el valor actual de la variable que fue pasada como parámetro. Es decir, el valor de la variable si se altera en el programa que llama.
Podemos distinguir entre parámetros formales y parámetros reales
Parámetros
Formales:
Aquellos que van en la definición de la función o un prototipo.
Son como variables locales a la función que sirven de comunicación
con el exterior.
Parámetros Reales: Se colocan en la invocación
de la función, pueden ser expresiones o variables del mismo tipo del
parámetro formal correspondiente. Deben colocarse en la misma posición
del parámetro formal correspondiente, respetando el número tipo
y posición de los parámetros formales.
Ejemplo función
Swap
void Swap(int x, int y) {
int temp ;
temp = x;
x = y;
y = temp;}
Con la invocacion,
Swap(a,b) ? no tendria ningun efecto, pues los parametros se han pasado por
valor. Es decir, no se afectan los valores de a y b.
Debe hacerse pasando los parametros por referencia
void Swap(int *apx, int *apy)
{int temp ;
temp = *apx;
*apx = *apy;
*apyy = temp ;}
main()
{int a = 20, b = 100;
Swap(&a, &b);
// Los valores de a y b se intercambian, a = 100, b = 20}