Академический Документы
Профессиональный Документы
Культура Документы
La Figura muestra cómo C organiza este array. Cada elemento contiene una dirección que
a otros valores de memoria. Cada valor apuntado debe ser entero. Se puede asignar
elemento de una dirección, tal como para variables puntero no arrays. por ejemplo,
Una matriz de número enteros, reales, puede verse como array de punteros; de tantos elementos
como filas tenga la matriz, apuntando cada elemento del array array de enteros reales, de tantos
elementos como columnas.
10.6.1. Inicialización de un array de punteros a cadenas
La inicialización de array de punteros a cadenas se puede realizar con una declaración similar a ésta:
Ago
se visualiza la letra ya que apunta al primer elemento de la cadena. Se puede hacer también
p
de modo que apuntará al carácter (la letra Sin embargo, no se puede hacer
p
ya que es array cuyos elementos son de tipo se produciría error al compilar
(tipo de asignación es incompatible).
DE PUNTEROS
Al contrario que nombre de array, que es un puntero constante no se puede modificar, puntero
es una variable que se puede modificar. Como consecuencia, se pueden realizar ciertas operaciones
aritméticas sobre punteros.
A un puntero se le puede sumar restar un entero esto hace que apunte posiciones adelante,
atrás de la actual. Una variable puntero puede modificarse para que contenga una dirección de memoria
n posiciones adelante atrás. Observe el siguiente fragmento:
A una variable puntero se le puede aplicar el operador el operador Esto hace que contenga
la dirección del siguiente, anterior elemento. Por ejemplo:
Recuérdese que un puntero es una dirección, por consiguiente, sólo aquellas operaciones de «sentido
son legales. tiene sentido, por ejemplo, sumar restar una constante de coma flotante.
punteros
se pueden sumar dos punteros.
No pueden multiplicar dos punteros.
pueden dividir dos punteros.
El ejemplo anterior con el bucle puede ser abreviado, haciendo uso de la característica de
nulo al final de la cadena. Utilizando la sentencia para realizar el bucle poniendo
la condición de terminación de nulo byte cero al final de la cadena. Esto elimina la necesidad del bucle
variable de control. El bucle se puede sustituir por
mientras que toma un valor de carácter distinto de cero, el bucle se ejecuta, el carácter se
imprime se incrementa para apuntar al siguiente carácter. Al alcanzar el byte cero final de la
cadena, toma el valor de cero. El valor cero hace que el bucle termine.
Una aplicación de punteros: conversión de caracteres
El siguiente programa muestra puntero que recorre una cadena de caracteres convierte cualquier
carácter en minúsculas a caracteres mayúsculas.
Obsérvese que si el carácter leído está en el rango entre es decir, una letra minúscula,
asignación
se ejecutará, restar 32 del código de una letra minúscula convierte a esta letra en mayúscula).
PUNTEROS CONSTANTES FRENTE A PUNTEROS A CONSTANTES
Ya está familiarizado con punteros constantes, como es el caso de nombre de array. Un puntero
constante es puntero que no se puede cambiar, pero que datos apuntados por el puntero pueden
ser cambiados. Por otra parte, puntero a una constante se puede modificar para apuntar a una
constante diferente, pero los datos apuntados por el puntero no se pueden cambiar.
Punteros constantes
Para crear puntero constante diferente de nombre de array, se debe utilizar el siguiente formato:
Como ejemplo de una definición de punteros de constantes, considérense las siguientes sentencias:
es un puntero de constantes que apunta a por que es una constante, pero es una variable.
Por consiguiente, se puede cambiar el valor de pero no
Por ejemplo, la siguiente asignación es legal, dado que se cambia el contenido de memoria a donde
apunta pero no el puntero en
Por otra parte, la siguiente asignación no es legal, ya que se intenta cambiar el valor del puntero
no se puede modificar para apuntar a una cadena diferente en memoria. Por consiguiente,
es legal, ya que se modifica el dato apuntado por nombre (cambia el primer carácter). Sin embargo,
Punteros a constantes
Algunos ejemplos:
50;
en los que se define como un puntero la constante datos son constantes no el puntero; en
consecuencia, se puede hacer que apunte a otra constante.
Una definición de un puntero constante tiene la palabra reservada delante del nombre del
puntero, mientras que el puntero a una definición constante requiere que la palabra reservada
se sitúe antes del tipo de dato. Así, la definición en el caso se puede leer como
«punteros constante de constante», mientras que en el segundo la definición «puntero
a tipo constante de dato».
La creación de puntero a una constante cadena se puede hacer del modo siguiente:
Esta definición se puede leer como tipo constante de dato puntero Un ejemplo
puede ser:
Regla
Si sabe que un puntero siempre apuntará a la misma posición nunca necesita ser reubicado
(recolocado), como un puntero constante.
Si sabe que el dato apuntado por el puntero nunca necesitará cambiar, defina el puntero como
un puntero a una constante.
Un puntero a una constante diferente un puntero constante. ejemplo muestra las
diferencias.
Con frecuencia se desea que una función calcule devuelva más de valor, bien se desea que una
función modifique variables que se pasan como argumentos. Cuando se pasa una variable a una
función por valor) no se puede cambiar el valor de esa variable. Sin embargo, si se pasa un puntero
una variable una función por se puede cambiar el valor de variable.
Cuando una variable es local a una función, se puede hacer variable visible a otra función
pasándola como argumento. Se puede pasar puntero a una variable local como argumento cambiar
la variable en la otra función.
Considere la siguiente definición de la función que incrementa entero en
La llamada esta función se realiza pasando una dirección que itilice esa función. Por ejemplo,
para llamar a la función utilice:
posible mezclar paso por referencia por valor. Por ejemplo, la función definida como
En por defecto,el paso de parámetros se hace por valor. no tiene por referencia,
hay que emularlo mediante el paso de dirección de una variable, utilizando punteros en
argumentos de la función.
En el siguiente ejemplo, se crea una estructura para apuntar las temperaturas más alta más baja de
un día determinado.
caso típico podría ser almacenar las lecturas de termómetro conectado de algún modo posible
a una computadora. Una función clave del programa lee la temperatura actual modifica el miembro
adecuado, en una estructura de la que se pasa la dirección del argumento
a parámetro puntero.
Este formato indica cornpilador que es un puntero a una función que devuelve
tipo tiene una lista de parámetros.
Un puntero a una función es simplemente un puntero cuyo valor es la dirección del nombre de la
función. Dado que el nombre es, en sí mismo, un puntero; un puntero a una función es un puntero a
puntero constante.
Figura a
Por ejemplo:
El primer identificador, apunta a una función que devuelve un tipo tiene Único
parámetro de tipo El segundo puntero, apunta a una función que devuelve tipo
acepta dos parámetros de tipo . El tercer puntero, es un puntero a una función que
devuelve tipo toma dos parámetros: puntero a tipo Por Último,
es puntero a una función que devuelve tipo tiene tres parámetros: un
un puntero a
al puntero escribiendo
para cualquier función que devuelva el tipo con un argumento . Diseñaremos una
función que tiene dos argumentos: el número de términos de la suma, la función
utilizada. pues, la función se va a llamar dos veces, va a calcular la suma de
2,
salida será:
Suma
10.1 Aplicación de punteros a función para ordenación
de
Los de la función y son:
Dirección de la clave a buscar.
Array que contiene valores a ordenar.
Número de elementos del
en bytes de cada elemento del array.
Nombre de la función que compara dos elementos del array.
apunta a array de funciones; cada miembro devuelve valor tiene único parametro
de tipo es puntero a array de funciones; cada miembro devuelve tipo
toma dos parámetros: puntero a gned
nombre de un elemento.
es un array.
es un array de punteros.
es un array de punteros a funciones.
es un array de punteros a funciones que devuelven valores
Se puede asignar la dirección de las funciones al array, proporcionando las funciones que ya han sido
declaradas. ejemplo es
{funcl,
10.11.4. Una aplicación de punteros de funciones
El listado siguiente, A c es programa que simula calculador que puede sumar, restar,
multiplicar dividir números. Se escribe una expresión simple por teclado el programa visualiza la
respuesta.
El programa define cuatros funciones: un array de
punteros a función que se inicializa a cada una de las funciones. Se pide la operación a realizar, se
busca el índice del puntero a función que le corresponde (dependiendo del operador) se realiza la
llamada a la función con puntero.
PUNTEROS A ESTRUCTURAS
Un puntero también puede apuntar a una estructura. Se puede declarar puntero a una estructura tal
como se declara un puntero a cualquier otro objeto se declara puntero estructura tal como se declara
cualquier otra variable estructura: especificando puntero en lugar del nombre de la variable estructura.
Ejemplo
En este ejemplo se declara tipo estructura que se asocia con el tipo para
facilidad de escritura. Un array de esta estructura con campos al azar muestran por
pantalla.
Al ejecutar este programa se visualiza la salida siguiente:
47
punteros son una de las herramientas más Para obtener la dirección de una variable
cientes para realizar aplicaciones en Aunque su existente, se utiliza operador de dirección
práctica puede resultar difícil y tediosa es, sin lugar a
dudas, una necesidad vital su aprendizaje si desea Se debe declarar un puntero antes de su uso.
obtener el máximo rendimiento de sus programas.
En este capítulo habrá aprendido los siguientes Un puntero es un punteroque no se asig
conceptos: na a un tipo de dato especifico y puede, por
consiguiente, utilizarse para apuntar a tipos de
Un puntero es una variable que contiene la datos diferentes en diversos lugares su pro
dirección de una posición en memoria. grama.
Para declarar un puntero se sitúa un asterisco Para inicializar un puntero que no apunta a
entre el tipo de dato y el nombre de la variable, nada, se utiliza la constante
como en
Estableciendo puntero la direccióndel pri
Para obtener valor almacenado en la direc mer elemento de un array, se puede utilizar
ción utilizada por el puntero, se utiliza el ope puntero para acceder a cada elemento del array
rador de indirección .El valor de es una de modo secuencial.
dirección de memoria el valor de es el
dato entero almacenado en esa dirección de Asi mismo, se han estudiado conceptos de
memoria. aritméticade punteros, punteros a funciones, punteros
a estructuras arrays punteros.