presentacion programacion punteros

Embed Size (px)

Citation preview

  • 8/14/2019 presentacion programacion punteros

    1/14

    Repblica Bolivariana de VenezuelaMinisterio del Poder Popular para la

    Educacin Superior Colegio Universitario

    Francisco de Miranda

    Integrantes:MORELLA GUZMNHENRY BRACHO

    PROFESOR:Lic. CARLOS ALFON

  • 8/14/2019 presentacion programacion punteros

    2/14

    PUNTEROS

    DEFINICION DE PUNTEROS

    DECLARICION DE PUNTEROSOPERAC IONES

    OPERADORESPUNTEROS Y ARREGLOS

  • 8/14/2019 presentacion programacion punteros

    3/14

    PUNTEROS

    DEFINICION DE PUNTEROS

    El tipo de datos ms caracterstico del C son los punteros. Un puntero contiene unvalor que es la direccin en memoria de un dato de cierto tipo. Los punteros se

    emplean en C para muchas cosas, por ejemplo recorrer vectores, manipularestructuras creadas dinmicamente, pasar parmetros por referencia a funciones,etc.

    Cuando se declara una variable, se reserva un espacio en la memoria paraalmacenar el valor de la variable.

    Ese espacio en memoria tiene una direccin.Un puntero es una direccin dentro de la memoria, o sea, un apuntador a dondese encuentra una variable.

  • 8/14/2019 presentacion programacion punteros

    4/14

    PUNTEROS

    REGLAS BASICAS DE UN PUNTERO

    A. Un puntero es una variable como cualquier otra

    B. Una variable como puntero contiene una direccin que apunta a otra posicin enmemoria

    C. En esa posicin se almacena los datos a los que apunta el puntero

    D. Un puntero apunta a una variable de memoria

  • 8/14/2019 presentacion programacion punteros

    5/14

    PUNTEROS

    DECLARACION DE PUNTEROS

    DECLARACIN DE UN PUNTERO

    Cuando declaramos una variable puntero es necesario especificar el tipode dato al que va a apuntar o sealar. Para ello se hace preceder a su nombre

    con un asterisco (*), mediante el siguiente formato:

    E J E M P L O S .

    P u n t e r o s a u n

  • 8/14/2019 presentacion programacion punteros

    6/14

    PUNTEROS

    EJEMPLOS

    Punteros a un dato:

    p

    d a t o

    Punteros a una variable:

    p v a r i a b l e

    Punteros a u

    p

    e s t r u c t u r a

    c a m p o1 c a m p o2 c a m p o3

    Punteros a un array:

    p

    a r r a y

    Pun

    c a d e n a

    p

    Punteros a un array bidimensional :

    p

    Punt

    p q

  • 8/14/2019 presentacion programacion punteros

    7/14

    PUNTEROS

    DECLARACION DE PUNTEROS/*1*/ struct MyStruct{/*2*/ int m_aNumber;

    /*3*/ float num2;/*4*/ };/*5*/ /*6*/ int * pJ2;/*7*/ struct MyStruct * pAnItem;Las primeras 4 lneas definen la estructura, La lnea 6 declara una variable queapuntara a un entero, y la lnea 7 declara una variable que apunta a alego de laestructura MyStruct. Entonces declarar un puntero es algo que apunta a algo de algn

    tipo, mas que contener el tipo, el asterisco (*) es ubicado antes del nombre de lavariable.En las siguientes lneas de cdigo, var1 es un puntero a un entero largo (long)mientras var2 es un entero largo (long) y no un puntero a un entero largo. En lasegunda lnea p3 es declarado como un puntero a un puntero de un entero.

    long * var1, var2; int ** p3;

  • 8/14/2019 presentacion programacion punteros

    8/14

    DECLARACION MULTIPLE DE PUNTEROS

    Si en una misma declaracin de variables aparecen varios punteros, hay que escribirel asterisco a la izquierda de cada uno de ellos:

    int *puntero1, var, *puntero2;

    Se declaran dos punteros a enteros ( puntero1 y puntero2) y un entero ( var).

    DECLARACION DE PUNTERO A PUNTERO

    Un puntero puede apuntar a otra variable puntero. Este concepto se utiliza conmucha frecuencia. Para declarar un puntero a un puntero se hace preceder a lavariable con dos asteriscos ( * * ) .

    int **ptr5

    PUNTEROS

  • 8/14/2019 presentacion programacion punteros

    9/14

    PUNTEROS

    PUNTEROS (null y void)

    Un puntero nulo (null) no apunta a ninguna parte -dato vlido- en particular, es decir,un puntero nulo no direcciona ningn dato vlido en memoria. Para declarar unpuntero nulo se utiliza la macro NULL, definida en los archivos de cabecera STDEF .H, STDIO. H, STDLIB. H y STRING. H.

    #define NULL O

    Inicializar una variable puntero a nulo es:char *p = NULL;

    Un puntero (void *; ) declarar de modo que apunte a cualquier tipo de dato, es decir,no se asigna a un tipo de dato especfico y se denomina puntero genrico puede

    direccionar cualquier posicin en memoria, pero el puntero no est unido a un tipo dedato especfico. De modo similar, los punteros void pueden direccionar una variablefloat, una char, o una posicin arbitraria o una cadena.

    void *ptr; / * declara un puntero void, puntero genrico *

    TIPOS DE PUNTEROS

  • 8/14/2019 presentacion programacion punteros

    10/14

    PUNTEROS

    OPERADORES DE PUNTEROS

    OPERADORES.

    OPERADOR &.

    Devuelve la direccin de mem

    p v a r

    t i p o _ v a r v a r ;t i p o _ v a r * p

    p = & v a r ;

    5

    v a r 1p

    5

    v a r 2q

    i n t v a r 1 , v a r 2 ;

    i n t * p , * q ;

    p = & v a r 1 ;

    q = & v a r 2 ;

  • 8/14/2019 presentacion programacion punteros

    11/14

    PUNTEROS

    OPERACIONES DE PUNTEROS

    OPERACIONES.ASIGNACIN.

    puntero direccin siendo direccin &variable o unpuntero

    .

    p = qp variable1

    q variable2

    p variable1

    q variable2

    p var

    p= &variable;

    Cada puntero definido es necesario inicializarlo asignndole ladireccin correspondiente para que apunte a la variable, dato, etc.

    deseado.

  • 8/14/2019 presentacion programacion punteros

    12/14

    Los arrays y punteros estn fuertemente relacionados en el lenguaje C. Se puedendireccionar arrays como si fueran punteros y punteros. La posibilidad de almacenar yacceder a punteros y arrays, implica que se pueden almacenar cadenas de datos enelementos de arrays. Sin punteros eso no es posible, ya que no existe el tipo de datocadena (string) en C. No existen variables de cadena. nicamente constantes decadena.

    int a[10];

    Define un arreglo de tamao 10, o sea un bloque de 10 enteros consecutivos que seacceden a travs de a[0], a[1], . . . , a[9].

    Un nombre de un array es una constante puntero, no una variable puntero.

    PUNTEROSPUNTEROS Y ARREGLOS

    (Arrays)

  • 8/14/2019 presentacion programacion punteros

    13/14

    PUNTEROS

    Punteros no inicializados

    Si se altera el valor al que apunta un puntero no inicializado, se estar modificando cualquierposicin de la memoria.

    main()

    {

    int* puntero;

    *puntero = 1200; /* Se machaca una zona cualquiera de la memoria */}

    Confusin de tiposUn puntero a un tipo determinado puede apuntar a una variable de cualquier otro tipo.Aunque el compilador lo puede advertir, no es un error.

    (Afortunadamente, esto no ocurre en C++).main()

    {

    int p;double numero;

    int* puntero;

    p = № /* incorrecto, pero el compilador no aborta */

    *p = 33; /* Un desastre */}

    PRECAUCIONES CON LOS PUNTEROS

  • 8/14/2019 presentacion programacion punteros

    14/14

    PUNTEROS

    Punteros a variables locales fuera de mbitoSi un puntero apunta a una variable local, cuando la variable desaparezca elpuntero apuntar a una zona de memoria que se estar usando para otros fines.Los resultados son imprevisibles y a menudo catastrficos.

    main(){

    int* puntero;

    while (...)

    {

    int local;

    puntero = &local; /* puntero apunta a una variable local */*puntero = 33; /* correcto */ }

    /* ahora puntero apunta a una zona de memoria invlida */

    puntero = 50; /* catstrofe */}