36
Apuntadores ó Punteros

1.-punteros

  • Upload
    leo-mar

  • View
    212

  • Download
    0

Embed Size (px)

DESCRIPTION

Lenguaje C, punteros

Citation preview

  • 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 )