Você está na página 1de 5

Seccin de Acceso Rpido de Subtemas de Este Captulo: Apuntadores en C. | Por que son Importantes los Apuntadores?

| Operadores de Direccin e Indireccin | Aritmetica de Apuntadores | Apuntadores a Funciones| Arreglos | Por que Usar Arreglos? | Declaracin de Arreglos | Arreglos y Apuntadores | Apuntadores en C 1.-Un Apuntador es una variable que contiene una direccin de memoria, la cual corresponder a un dato o a una variable que contiene el dato. Los apuntadores tambin deben de seguir las mismas reglas que se aplican a las dems variables, deben tener nombre nicos y deben de declararse antes de usarse. Cada variable que se utiliza en una aplicacin ocupa una o varias posiciones de memoria. Estas posiciones de memoria se accesan por medio de una direccin.

En la figura el texto Hello sta guardado en memoria, comenzando en la direccin 1000. Cada carcter ocupa un espacio de direccin nico en memoria. Los apuntadores proporcionan un mtodo para conservar y llegar a estas direcciones en memoria. Los apuntadores facilitan el manejo de datos, debido a que conservan la direccin de otra variable o ubicacin de datos.

1.1-Por qu son Importantes los Apuntadores?Los apuntadores dan flexibilidad a los programas en C++ y permiten que estos crezcan dinmicamente. Utilizando un apuntador hacia un bloque de memoria que se asigna al momento de ejecucin, un programa puede ser ms flexible que uno que asigna toda su memoria de una sola vez. Tambin, un apuntador es ms fcil de guardar que una estructura grande o un objeto de una clase. Debido a que un apuntador slo guarda una direccin, puede fcilmente pasarse a una funcin. Uno de las desventajas que pueden presentar los apuntadores es que un apuntador sin control o no inicializado puede provocar fallas en el sistema, adems de que su uso incorrecto puede generar fallas muy complejas de hallar.

1.2 Operadores de Indireccin y Direccin. Hay 2 operadores que se usan cuando trabajan con direcciones en un programa C; el Operador de Indireccin ( * ) y el de Direccin (&). Estos operadores son diferentes de los tratados anteriormente. El Operador de Direccin ( &) regresa la direccin de una variable. Este operador est asociado con la variable a su derecha: &h; Esta lnea regresa la direccin de la variable h. El Operador de Indireccin ( * ) trabaja a la inversa del operador de Direccin. Tambin esta asociado con la variable a su derecha, toma la direccin y regresa el dato que contiene esa direccin. Por ejemplo, la siguiente lnea determina la direccin de la variable h y luego usa el operador de Indireccin para accesar la variable y darle un valor de 42: *(&h)=42;

La declaracin de un puntero de manera general es: tipo *nombre de apuntador; Tipo : Especifica el tipo de objeto apuntado y puede ser cualquier tipo. Nombre de apuntador: Es el identificador del apuntador. El espacio de memoria requerido para un apuntador, es el nmero de bytes necesarios para especificar una direccin de memoria, debiendo apuntar siempre al tipo de dato correcto. Considere el siguiente programa y observe a las variables de direccin e Indireccin trabajar:

1.3-La Aritmtica de Apuntadores. Solamente se pueden realizar operaciones de incremento y decremento, y estos es deacuerdo a la longitud de su tipo de base. Por ejemplo supngase que una mquina particular utiliza direccionamiento de byte, un entero requiere 4 bytes y el valor de la variable pi (declarada asi: int *pi) es 100, es decir, se apunta al entero *pi en la localidad 100. Entonces el valor de pi-1 es 96, el de pi+1 es 104 y el de pi+2 es 108. El valor de *(pi-1) es el de los contenidos de los 4 bytes 96,97,98, y 99 , el de *(pi+1) es el del contenido de los byte 104, 105,106 y 107, y el de *(pi+2) es el entero que esta en los bytes 108,109,110 y 111. De manera parecida, si el valor de la variable pc (declarada asi: char *pc; ) es igual a 100, y un carcter tiene un byte de longitud, pc-1 refiere a la localidad 99, pc+1 a la 101 y pc+2 a la 102.

1.4 Apuntadores a Funciones.Un rea en la cual desempean un papel prominente los apuntadores es el lenguaje C es la transmisin de parmetros a funciones. Por lo comn, los parmetros se transmiten por valor a una funcin en C, es decir, se copian los valores transmitidos en los parmetros de la funcin llamada en el momento en que se invoca. Si cambia el valor de un parmetro dentro de la funcin, no cambia su valor en el programa que la llama. Por ejemplo considrese el siguiente fragmento y funcin de programa (el numero de lnea es solo una gua en el ejemplo):

La lnea 2 imprime el nmero 5 y despus llama a funct. El valor de "x", que es 5, se copia en "y" y comienza la ejecucin de funct. Despus, la lnea 9 imprime el nmero 6 y regresa funct. Sin embargo, cuando la lnea 8 incrementa el valor de "y", el valor de "x" permanece invariable. As, la lnea 4 imprime el nmero 5, "x" y "y" refieren a 2 variables diferentes. Si deseamos usar funct para modificar el valor de "x", debemos de transmitir la direccin de "x" de la siguiente manera:

La lnea 2 imprime nuevamente el nmero 5, y la lnea 3 llama a funct. Ahora, sin embargo, el valor transferido no es el valor entero de "x" sino el valor apuntador "&x". Este es la direccin de "x". El parmetro de funct no es ms y de tipo int, sino py de tipo int * . (Es conveniente nombrar a las variables apuntadores comenzando con la letra p para recordar tanto que se trata de un apuntador) la lnea 8 ahora aumenta al entero en la localidad py; py, sin embargo, no cambia y conserva su valor inicial "&x". As, py apunta al entero "x" de tal manera que cuando *py, aumenta x. La lnea 9 imprime 6 y cuando regresa funct, la lnea 4 imprime tambin 6. Los apuntadores son el mecanismo usado en el lenguaje C para permitir a una funcin llamada modificar las variables de la funcin que llama.

Areglos en C. 2.-Arreglos. Es una serie de datos del mismo tipo, tambin conocidos como vectores o rangos. Una arreglo esta constituido por varias posiciones de memoria de igual tamao consecutivas que tienen el mismo tipo de variable y se accesan usando el mismo nombre seguido de un subndice entre corchetes. La cantidad total de espacio que se usa por un arreglo depende de 2 cosas: El nmero de elementos en el arreglo y El tamao del arreglo.

2.1- Por qu Usar los Arreglos? Por que son uno de los factores esenciales de los programas de computadora. Permiten que se haga referencia a entradas individuales en una tabla de elementos de datos usando el mismo cdigo y variando el ndice del elemento.

2.3- La Declaracin de un Arreglo es igual a como se hara con una variable, a excepcin de que tambin se especifica la cantidad de elementos en el arreglo encerrado entre corchetes de la siguiente manera: tipo nombre_del_arreglo[tamao]; Cuando se declara un arreglo, sus valores se pueden inicializar de la siguiente manera: Int lista[9]= {0, 4, 78, 5, 32, 9, 77, 1, 23} No trate de engaar al Compilador inicializando mas valores en el arreglo de los que puede, ya que este no lo obedecer, sin embargo, si inicializa solo una parte del arreglo, las restantes posiciones se inicializan con 0s. Si desea imprimir un valor de un arreglo, la lnea luce as: printf ("%d", lista[1]); Una Caracterstica importante de los arreglos en C es que no se pueden modificar los limites superior e inferior (y por tanto el rango) durante el programa. El limite inferior se fija siempre en 0 y el superior lo fija el programador, es decir:

Se han visto hasta ahora, arreglos llamados Unidimensionales, pero existen tambin los llamados Bidimensionales, y se declaran as: tipo nombre_arreglo_bi[tamao][tamao]; Estos tambin son comnmente conocidas como Matrices, El tamao en la declaracin de la matriz estipula Renglon-Columna y se representaran as:

Estos tambin se pueden inicializar: Int lista_nueva[2][2]={{14, 34},{23, 67}}; y se acceden de la misma manera que un unidimensional. Ejemplo printf ("%d", lista_nueva[1][0]); Y de esta forma se pueden construir arreglos Multidimensionales p/e: int grande[3][4][7]; incluso int mas_grande [5][7][8][2][3][2]; pero se debe de tener cuidado al manejar estos arreglos por que son complejos de manipular a la larga. A pesar de ser Bidimensionales, en la memoria siguen siendo representados como espacios secuenciales lineales.

2.4 Arreglos y Apuntadores. Las versiones con apuntadores en los arreglos son mas rpidas que la indexacin comn. La declaracin int a[10]; int *pa; por lo que pa=&a[0] y as establecemos que *pa=a[0] y *(pa+1)=a[1] y as sucesivamente. De esta manera se pude manejar mas eficientemente los valores y direcciones de un arreglo Bi o Unidimensional.

Você também pode gostar