Вы находитесь на странице: 1из 5

Apuntadores

Esquema de Un Computador

La Memoria del Computador

Almacena datos e instrucciones de programa. Puede considerarse a la memoria como una lista o arreglo de casillas identificadas o enumeradas En las direcciones de memoria se almacenan datos en la forma de palabras Las palabras estn constituidas por uno o mas Bytes, dependiendo de la arquitectura de la maquina Los Bytes, estn compuestos por 8 bits Los bits, o dgitos binarios, son la unidad mnima de almacenamiento, almacenan los valores 1 = encendido, y 0 = apagado.

Caractersticas de los Apuntadores


Son variables que mantienen direcciones de memoria Poderosos para manejar datos, de manera no posible en otros lenguajes Permiten el pasaje de parmetros por referencia. Cuando se utilizan de manera incorrecta, son una fuente de bugs en los programas y frustracin en el programador.

Introduccin Al ejecutarse un programa, las variables se almacenan en memoria, cada una en su propia y nica direccin o localidad. Las variables en general contienen un valor o dato. 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 direccin de memoria. As como los datos pueden modificarse cuando se trabaja con una variable normal, el valor de la direccin almacenada en un apuntador tambin puede modificarse. Usualmente, la direccin almacenada en el apuntador es la direccin correspondiente a alguna otra variable del programa. int *ptr; ptr = &count /* Guarda direccin de count en ptr */ /* el operador unario & retorna la direccin de la variable */ Para tomar el valor o contenido que es almacenado en la localidad de memoriam en el apuntador, es necesario de referenciar al apuntador. Esto se hace usando el operador unario *. int total; total = *ptr; /* The value in the address stored in ptr is assigned to total */ La mejor manera de aprender apuntadores es con la prctica y los ejemplos. Los apuntadores son un tpico difcil. No se preocupen si el panorama no esta completamente claro todava. Ejemplo de Declaracin e Inicializacin int main() { int j; int k; int l; int *pt1; /* Declares an integer pointer */ int *pt2; /* Declares an integer pointer */ float values[100]; float results[100]; float *pt3; /* Declares a float pointer */ float *pt4; /* Declares a float pointer */ j = 1; k = 2; pt1 = &j;

/* pt1 contains the address of the variable j */

pt2 = &k; /* pt2 contains the address of variable k */ pt3 = values; /* pt3 contains the address of the first element of values */ pt3 = &values[0]; /* This is the equivalent of the above statement */ return 0; } Dereferenciacion de Apuntadores y Asignacin de valores La dereferenciacin permite la manipulacin de los datos contenidos en la direccin de memoria guardada en el apuntador. El apuntador guarda una direccin de memoria. Al de referenciar un apuntador, podemos modificar los datos o valores contenidos en esa direccin de memoria. El operador unario *, es utilizado para de referenciar a los apuntadores. *pt1 =*pt1 + 2; Esta instruccin suma dos al valor apuntado por pt1. Es decir, la instruccin suma dos a; contenido de la direccin de memoria almacenada por pt1. Entonces, a partir del programa principal, pt1 contiene la direccin de j. La variable "j" fue inicializada con 1. El efecto de la instruccin mostrada arriba es sumar 2 a j. El contenido de la direccin 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. */ Aritmtica de Apuntadores Parte del poder de los apuntadores proviene de la habilidad de hacer aritmtica en los apuntadores mismos. Los apuntadores pueden ser incrementados, decrementados y manipulados utilizando expresiones aritmticas. 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++; }

Pasaje de Parmetros

Por valor: Los valores que se pasan se copian a los parmetros de la funcin, si el valor de un parmetro se modifica dentro de la funcin, no se altera su valor en el programa que lo llama. Por Referencia: Permiten modificar dentro de la funcin el valor actual de la variable que fue pasada como parmetro. Es decir, el valor de la variable si se altera en el programa que llama.

Podemos distinguir entre parmetros formales y parmetros reales


Parmetros Formales: Aquellos que van en la definicin de la funcin o un prototipo. Son como variables locales a la funcin que sirven de comunicacin con el exterior. Parmetros Reales: Se colocan en la invocacin de la funcin, pueden ser expresiones o variables del mismo tipo del parmetro formal correspondiente. Deben colocarse en la misma posicin del parmetro formal correspondiente, respetando el nmero tipo y posicin de los parmetros formales.

Ejemplo funcin Swap void Swap(int x, int y) { int temp ; temp = x; x = y; y = temp; } Con la invocacin, Swap (a, b) ? no tendra ningn efecto, pues los parmetros 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 }

Вам также может понравиться