1.-punteros
description
Transcript of 1.-punteros
-
Apuntadores
Punteros
-
OBJETIVOS
Comprender los apuntadores y los operadores paraapuntadores.
Utilizar los apuntadores para pasar por referenciaargumentos a una funcin.
Comprender las relaciones entre apuntadores, arreglos ycadenas.
Comprender el uso de los apuntadores a funciones.
Definir y utilizar los arreglos de cadenas.
-
Introduccin
En este captulo, explicaremos una de las caractersticas ms
poderosas del lenguaje de programacin C, el apuntador.
Los apuntadores son de las capacidades de C ms difciles de dominar.
Los apuntadores permiten a los programadores simular las llamadas
por referencia, y crear y manipular estructuras de datos dinmicas, es
decir, estructuras de datos que pueden crecer y encogerse en tiempo
de ejecucin, tales como listas ligadas, colas, pilas y rboles.
En este captulo, explicamos los conceptos bsicos de los
apuntadores.
-
Definicin e inicializacin de variables
de apuntador
Los apuntadores son variables cuyos valores son direcciones de memoria.
Por lo general, una variable contiene directamente un valor especfico. Por
otro lado, un apuntador contiene la direccin de una variable que contiene un
valor especfico.
En este sentido, el nombre de una variable hace referencia directa a un valor,
y un apuntador hace referencia indirecta a un valor (figura 7.1).
Al proceso de referenciar a un valor a travs de un apuntador se le llama
indireccin.
-
Los apuntadores, como todas las variables, deben definirse antes de
que se puedan utilizar. :
int *ptrCuenta, cuenta;
La definicin especifica que la variable ptrCuenta es de tipo int * (es
decir, un apuntador a un entero) y se lee, ptrCuenta es un apuntadora un int o ptrCuenta apunta a un objeto de tipo int.
Adems, la variable cuenta se define como int, no como un apuntador
a un int. El * slo se aplica a la variable que se define como
apuntador.
Cuando se utiliza el * de este modo en una definicin, indica que la
variable que se est definiendo es un apuntador.
Los apuntadores pueden definirse para apuntar a objetos de cualquier
tipo de dato.
-
Los apuntadores deben inicializarse en el momento en que se definen
o en una instruccin de asignacin.
Un apuntador puede inicializarse en 0, NULL o en una direccin. Un
apuntador con el valor NULL, apunta a nada.
NULL es una constante simblica definida en el encabezado
(el cual se incluye en varios otros encabezados, tales
como ).
Inicializar un apuntador en 0 es equivalente a inicializar un apuntador
en NULL, pero es preferible utilizar NULL.
Cuando se asigna 0, primero se convierte a un apuntador del tipo
apropiado. El valor 0 es el nico valor entero que puede asignarse de
manera directa a la variable de apuntador.
Inicialice los apuntadores para prevenir resultados inesperados.
-
Operadores para apuntadores
El &, u operador de direccin, es un operador unario que devuelve la
direccin de su operando. Por ejemplo, si consideramos las definiciones
int y = 5;
int *ptrY;
la instruccin
ptrY = &y;
asigna la direccin de la variable y a la variable apuntador ptrY. Entonces, se
dice que la variable ptrY apunta a y.
En la figura 7.2 mostramos una representacin esquemtica de la memoria,
despus de que se ejecuta la instruccin anterior.
-
Figura 7.2
-
La figura 7.3 muestra la representacin del apuntador en memoria, asumiendo que la variable entera y est almacenada en la direccin de memoria 600000, y que la variable de apuntador ptrY est almacenada en la ubicacin de memoria 500000.
El operando del operador de direccin debe ser una variable; el operador de direccin no puede aplicarse a constantes, expresiones o variables declaradas mediante la clase de almacenamiento register.
El operador *, por lo general llamado operador de indireccin u operador de desreferencia, devuelve el valor del objeto al que apunta su operando (es decir, un apuntador). Por ejemplo, la instruccin
printf( %d, *ptrY );
imprime el valor de la variable y, a saber 5. Al uso de * de esta manera se le conoce como desreferenciar a un apuntador.
-
Llamada a funciones por referencia
-
Uso del calificador const con
apuntadores
El calificador const permite a los programadores informar al compilador que
no se debe modificar el valor particular de una variable.
El calificador const no exista en las primeras versiones de C; el comit ANSI
de C lo adicion al lenguaje.
-
Tip de portabilidad
Aunque const est bien definido en el ANSI C, algunos compiladores no lo
soportan
-
Ordenamiento de burbuja mediante
llamadas por referencia
ejercicio
-
Expresiones con apuntadores y
aritmtica de apuntadores
Los apuntadores son operandos vlidos dentro de las expresiones aritmticas,
expresiones de asignacin y expresiones de comparacin. Sin embargo, por lo
general no todos los operadores utilizados son vlidos con el uso de las
variables de apuntadores. Esta seccin describe los operadores que pueden
tener apuntadores como operandos, y cmo se utilizan estos operadores.
Se puede realizar un conjunto limitado de operaciones con los apuntadores.
Un apuntador se puede incrementar(++) o decrementar(--), se puede sumar
un entero a un apuntador (+ o +=), se puede restar un entero a un apuntador
(- o -=) y se puede restar un apuntador a otro.
-
Expresiones con apuntadores y
aritmtica de apuntadores
Suponga que el arreglo int v[ 5 ] ya est definido y que su primer elemento se
encuentra en la ubicacin 3000 de memoria. Suponga que el apuntador ptrV
se inicializa para apuntar a v[ 0 ], es decir, el valor de ptrV es 3000. La figura
7.18 ilustra esta situacin para una mquina con enteros de 4 bytes. Observe
que ptrV puede inicializarse para que apunte al arreglo v con cualquiera de
las instrucciones
ptrV = v;
ptrV = &v[ 0 ];
-
Relacin entre apuntadores y arreglos En C, los arreglos y los apuntadores estn ntimamente relacionados, y a menudo se
pueden utilizar de manera indistinta. Un nombre de arreglo puede interpretarse como
un apuntador constante. Los apuntadores se pueden utilizar para realizar cualquier
operacin que involucre subndices de arreglos.
Suponga que el arreglo de enteros b[ 5 ] y la variable apuntador ptrB ya estn
definidos. Dado que el nombre del arreglo (sin subndice) es un apuntador al primer
elemento del mismo arreglo, podemos establecer ptrB igual a la direccin del primer
elemento del arreglo b mediante la instruccin
ptrB = b;
Esta instruccin es equivalente a tomar la direccin del primer elemento del arreglo
de la siguiente manera
ptrB = &b[ 0 ];
De manera alterna, se puede hacer referencia al elemento b[ 3 ] del arreglo mediante
la expresin con apuntadores
*( ptrB + 3 )