Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Integrantes:
Contreras Jonathan
Zerpa Gabriel
Caracas
Introducción
Como vimos anteriormente, las estructuras de datos son aquellas cuya ocupación de
memoria puede aumentar o disminuir durante el tiempo de ejecución. Mediante los
punteros, tema que estudiaremos a continuación, podemos crear estructuras de datos
dinámicas que tienen capacidad de variar en tamaño y ocupar tanta memoria como
realmente requieran. Estas estructuras son llamadas punteros.
Desarrollo
Punteros
Cada vez que se declara una variable C, el compilador establece un área de memoria
para almacenar el contenido de la variable. Cuando se declara una variable i n t (entera),
por ejemplo, el compilador asignados bytes de memoria. El espacio para esa variable se
sitúa en una posición específica de la memoria, conocida como dirección de memoria.
Cuando se referencia (se hace uso) al valor de la variable, el compilador de C accede
automáticamente a la dirección de memoria donde se almacena el entero. Se puede
ganar en eficacia en el acceso a esta dirección de memoria utilizando un puntero.
Declaración de punteros
Al igual que cualquier variable, las variables punteros han de ser declaradas antes de
utilizarlas. La declaración de una variable puntero debe indicar al compilador el tipo de
dato al que apunta el puntero para ello se hace preceder a su nombre con un asterisco
(*), mediante el siguiente formato:
AI igual que otras variables, C no inicializa los punteros cuando se declaran y es preciso
inicializarlos antes de su uso. La inicialización de un puntero proporciona a ese puntero
la dirección del dato correspondiente. Después de la inicialización, se puede utilizar el
puntero para referenciar los datos direccionados. Para asignar una dirección de memoria
a un puntero se utiliza el operador de referencia (&). Así, por ejemplo, & valor
*p = 50;
Indirección de punteros
• float *fp;
• char c;
• fp = &c; / * no es válido * /
C requiere que las variables puntero diseccionen realmente variables del mismo tipo de
dato que está ligado a los punteros en sus declaraciones.
Punteros a Punteros
Un puntero puede apuntar a otra variable puntero. Este concepto se utiliza con mucha
frecuencia en programas complejos de C. Para declarar un puntero a un puntero se hace
preceder a la variable con dos asteriscos ( * * ) .
Punteros y Arrays
Los arrays y punteros están fuertemente relacionados en el lenguaje C. Se pueden
direccionar arrays como si fueran punteros y punteros como si fueran arrays. La
posibilidad de almacenar y acceder a punteros y arrays, implica que se pueden
almacenar cadenas de datos en elementos de arrays. Sin punteros eso no es posible, ya
que no existe el tipo de dato cadena (string) en C. No existen variables de cadena.
Únicamente constantes de cadena.
Punteros de Cadenas
Aritmética de punteros
Punteros constantes
pl es un puntero de constantes que apunta a x, por lo que pl es una constante, pero *pl es
una variable. Por consiguiente, se puede cambiar el valor de *pl , pero no pl .Por
ejemplo, la siguiente asignación es legal, dado que se cambia el contenido de memoria a
donde apunta PI, pero no el puntero en sí.
Punteros a constantes
El formato para definir un puntero a una constante es:
Una definición de un puntero constante tiene la palabra reservada const delante del
nombre del puntero, mientras que el puntero a una definición constante requiere que la
palabra reservada const se sitúe antes del tipo de dato. Así, la definición en el primer
caso se puede leer como «punteros constante o de constante», mientras que en el
segundo caso la definición se lee «puntero a tipo constante de dato»
La creación de un puntero a una constante cadena se puede hacer del modo siguiente:
Esta definición se puede leer como <<un tipo constante de dato y un puntero constante.
Un ejemplo
• const int x = 25;
• const int "const pl = &x;
Que indica: «PI es un puntero constante que apunta a la constante entera x». Cualquier
intento de modificar pl o bien *pl producirá un error de compilación.
Regla:
• Si sabe que un puntero siempre apuntará a la misma posición y nunca necesita
ser reubicado
• Si sabe que el dato apuntado por el puntero nunca necesitará cambiar, defina el
puntero como (recolocado), defínalo como un puntero constante. un puntero a
una constante.
Con frecuencia se desea que una función calcule y devuelva más de un valor, o bien se
desea que una función modifique las variables que se pasan como argumentos. Cuando
se pasa una variable a una función (paso por valor) no se puede cambiar el valor de esa
variable. Sin embargo, si se pasa un puntero a una variable a una función (paso por
dirección) se puede cambiar el valor de la variable. Cuando una variable es local a una
función, se puede hacer la variable visible a otra función pasándola como argumento. Se
puede pasar un puntero a una variable local como argumento y cambiarla variable en la
otra función.
Punteros a funciones
Hasta este momento se han analizado punteros a datos. Es posible declarar punteros a
cualquier tipo de variables, estructura o array. De igual modo, las funciones pueden
declarar parámetros punteros para permitir que sentencias pasen las direcciones de los
argumentos a esas funciones .Es posible también crear punteros que apunten a
funciones. En lugar de direccionar datos, los punteros de funciones apuntan a código
ejecutable. Al igual que los datos, las funciones se almacenan en memoria y tienen
direcciones iniciales. En C se pueden asignar las direcciones iniciales de funciones a
punteros. Tales funciones se pueden llamar en un modo indirecto, es decir, mediante un
puntero cuyo valor es igual a la dirección inicial de la función en cuestión.
Este formato indica al compilador que PunteroFunci es un puntero a una función que
devuelve
La función asignada debe tener el mismo tipo de retorno y lista de parámetros que el
puntero a función; en caso contrario, se producirá un error de compilación. Así,
Los punteros a funciones también permiten pasar una función como un argumento a otra
función .Para pasar el nombre de una función como un argumento función, se especifica
el nombre de la función como argumento. Supongamos que se desea pasar la función m
i f unc ( ) a la función suf unc ( )
Un puntero también puede apuntar a una estructura. Se puede declarar un puntero a una
estructura tal como se declara un puntero a cualquier otro objeto y se declara un puntero
estructura tal como se declara cualquier otra variable estructura: especificando un
puntero en lugar del nombre de la variable estructura.
• struct persona
• {
• char nombre [30 I ;
• int edad;
• int altura;
• int peso;
• };
• struct persona empleado = {"Amigo, Pepe", 47, 182, 85);
• struct persona *p; / * se crea un puntero de estructura * /
• p = &empleado;
Como hemos visto los punteros es necesario para ejecutar un comando e realizar una
programación ya que son puntos de inicio que da a corregir fallas y son puntos de
claves para hacer funcionar el dicho programa
Esto demuestra gran importancias se puede decir que sin esto punteros el programa no
funciona ya que no hay inicio y no hay un comando que el vea para ejecutar así lo
hemos visto y en podido entender todo eso…