O GoConqr está de visual novo! Conte para nós o que você achou.

Slides

Punteros

LUIS FERNANDO RUIZ GARCIA Espanhol 13 slides

Slides do conjunto (13)

  1. PUNTERO

    • Introducción
    • El puntero es una técnica muy potente que hace que la programaciónC++ sea tan utilizada. La técnica de punteros apoya a la programaciónorientada a objetos, que es una de las grandes diferencias entre C y C++.
    • Definición:
    • Un puntero es una variable que almacena una dirección dememoria
  2. Caracteristica:

    • Permiten simular el paso por referencia, crear y manipular estructuras
    • dinamicas de datos, tales como listas enlazadas, pilas, colas y árboles.
    • Generalmente las variables contienen valores especificos. Los punteros
    • son variables pero en vez de contener un valor especifico, contienen las
    • direcciones de las variables a las que apuntan. Para obtener o
    • modificar el valor de la variable a la que apuntan se utiliza el
    • operador de indirección. Los punteros, al ser variables deben ser
    • declaradas como punteros antes de ser utilizadas.
  3. Aplicacion

    • C++ no inicializa los punteros cuando se declaran y es necesario inicializarlos antes depoder utilizarlos. Para asignar una dirección de memoria a un puntero se utiliza el operadorde referencia (&). Ejemplo: &var1, significa la dirección de la variable var1. Por tal razón lainicialización de un puntero requiere:
    • ➢Asignar memoria definiendo una variable
    • ➢Declarar un puntero
    • ➢Hacer que el puntero apunte a la dirección de la variable.
    • Para asignar un valor a la dirección de memoria a la que apunta el puntero ptr se utiliza el operador sobrecargado (*)
  4. Declaración de punteros

    • La declaración de un apuntador debe indicar al compilador el tipo de dato al que apunta,para ello se hace preceder a su identificador con un asterisco (*) como sigue:
    • <Tipo de dato>* <identificador de puntero>;
    • también es perfectamente valido utilizar
    • <Tipo de dato> *<identificador de puntero>;
  5. Slide 5

    • La única diferencia es que el primer caso sugiere que '*' forma parte del tipo de dato', y en elsegundo que '*' forma parte del identificador. Lo recomendable es adoptar la primera forma,ya que la segunda se presta a confundir el operador '*' con el operador de indirección, y esmuy importante comprender que aquí no hay nada de indirección, es solo una declaración deun identificador, ligado a un tipo (<Tipo de dato>*). Es el mensaje del compilador el quenos indica esta ultima interpretación.
    • Ejemplos:
    • in t* ptr1; //Puntero a un tipo de dato entero (int)
    • long* ptr2;//Puntero a un tipo de dato entero largo (long int)
    • char* ptr3;//Puntero a un tipo de dato char
    • float* ptr4;//Puntero a un tipo de dato float
  6. Puntero a una funcion

    • Cuando pasamos un puntero como parámetro de una función por valor
    • pasa lo mismo que con cualquier otro objeto.
    • Dentro de la función trabajamos con una copia del parámetro, que en este caso
    • es un puntero. Por lo tanto, igual que pasaba con el ejemplo anterior, las
    • modificaciones en el valor del parámetro serán locales a la función y no
    • se mantendrán después de retornar.
    • Sin embargo, no sucede lo mismo con el objeto apuntado por el puntero, puesto
    • que en ambos casos será el mismo, ya que tanto el puntero como el parámetro tienen
    • como valor la misma dirección de memoria. Por lo tanto, los cambios que hagamos en
    • los objetos apuntados por el puntero se conservarán al abandonar la función.
  7. Ejemplo:

    • #include <iostream>
    • using namespace std;
    • void funcion(int *q);
    • int main() {
    • int a;
    • int *p;
    • a = 100;
    • p = &a;
    • // Llamamos a funcion con un puntero
    • funcion(p); // (1)
    • cout << "Variable a: " << a << endl;
    • cout << "Variable *p: " << *p << endl;
    • // Llamada a funcion con la dirección de "a" (constante)
    • funcion(&a); // (2)
  8. Punteros y areglo en una dimension

    • Existe una estrecha relación
    • entre apuntadores
    • y arreglos, tanto que pueden ser usados en forma casi indistinta.
    • Una variable de tipo arreglo puede
    • considerarse
    • como un apuntadoral tipo del arreglo.
    • Los apuntadores pueden ser
    • utilizados
    • en cualquier
    • operación que involucre subíndices de arreglos.
  9. Ejemplo relacion apuntadores y arreglos

    • #include <stdlib.h>
    • #include <stdio.h>
    • int main()
    • {
    • int tabla[10],i,x,*pt,*ptr;
    • pt = &tabla[0];
    • x = *pt;
    • for (i=0; i <10; i++)
    • *(pt+i) = rand() % 100;
    • ptr = tabla;
    • for (i=0; i <10; i++)
    • printf(''%d
    • \n'',*(ptr+i),tabla[i]);
    • }
    • Cuando se suma 1 a un apuntador el
    • incremento
    • se adecua al tamaño en memoria del objeto apuntado.
    • Un apuntador es una variable, por
    • lo
    • que operaciones
    • como pa = a y pa++ son permitidas.
    • Un nombre de un arreglo es una constante,
    • no una variable, de ahí que a = pa o a++ o p = a.
  10. Asignacion dinamica de memoria

    • Cuando se declara un puntero se reserva memoria para albergar una dirección dememoria, pero NO PARA ALMACENAR EL DATO AL QUE APUNTA EL PUNTERO.El espacio de memoria reservado para almacenar un puntero es el mismo independientemente del tipo de dato al que apunte.
    • La forma de indicar la dirección
    • de una variable, es utilizando el operador &de tipo monario precediendo al
    • nombre de la variable, por tanto, hay que diferenciar en una variable, cuando
    • se está empleando su valor (referenciado por su nombre) o cuando se está
    • empleando su dirección (al preceder su nombre con el símbolo &).
    • Int cant; Cant = 15;
    • &cant; /* Indica la dirección de la variable cant*/
    • Para que una
    • variable puntero apunte a otra variable es necesario asignar la dirección de
    • dicha variable al puntero.
  11. Operaciones con punteros

    • Int a = 5, b, c;
    • Int *p1 =&a, *p2;
    • P2 = p1;
    • B = *p1;
    • c = *p2;
    • ARITMÉTICA DE PUNTEROS
    • Sumar o restar un número entero a un puntero.
    • Nombre_punter + n = Dirección + n
    • *tamaño_tipo_dato
    • Float num, *punt, *pnum
    • Punt =&num;
    • Pnum =punt + 2
    • / * Si se se supone que la dirección contenida
    • en punt es 4274, la dirección que contiene ‘pnum’ es 4274 + 2 * 4 = 4282 * /
  12. Funciones a otras funciones

    • Una función es un conjunto de líneas de código que realizan una tarea
    • específica y puede retornar un valor.
    • Las funciones pueden tomar
    • parámetros que modifiquen su funcionamiento. Las funciones son
    • utilizadas para descomponer grandes problemas en tareas simples y para
    • implementar operaciones que son comúnmente utilizadas durante un
    • programa y de esta manera reducir la cantidad de código.
    • Cuando una
    • función es invocada se le pasa el control a la misma, una vez que esta
    • finalizó con su tarea el control es devuelto al punto desde el cual la
    • función fue llamada.
  13. Funcion anfitriona

    • La palabra-clave friend es un especificador de acceso. Se usa para declarar que una función o
    • clase (la denominaremos "invitada"), tiene derecho de acceso a los miembros de la clase en que se declara
    • (denominada "anfitriona"), sin que la clase invitada tenga que ser miembro de la anfitriona. En todos los otros
    • aspectos la invitada es una función o clase normal en lo que se refiere a su declaración, definición y ámbito.
    • Dicho en otras palabras: friend es un especificador de ámbito que
    • "alarga" el ámbito del invitado (clase o función) al interior de
    • la clase anfitriona (a todo
    • el interior, incluyendo miembros privados y protegidos ).

Informações

Descrição
Punteros - Ruiz Garcia Luis Fernando
Criado por
LUIS FERNANDO RUIZ GARCIA · fev 2016
Atualizado
1 mar 2016
Visualizações
20
Tags
h1h2h3
Avaliação

Mais sobre Elementos de un programa

Fale Conosco

Sobre o que é sua mensagem?

O que você acha do novo visual?

Você gostou?