Punteros en C++ - Parte II

download Punteros en C++ - Parte II

of 37

Transcript of Punteros en C++ - Parte II

  • 7/26/2019 Punteros en C++ - Parte II

    1/37

    PUNTEROS EN C++PARTE II

    LICENCIATURA EN INFORMTICAADMINISTRATIVA

  • 7/26/2019 Punteros en C++ - Parte II

    2/37

    Qu es un puntero?

    Un puntero es un tipo de variable especial quealmacena una direccin de memoria.Esta direccin es la localizacin de otro objeto(normalmente otra variable) en memoria.

    Si un puntero contiene la direccin de otra variable,se dice que el puntero esta haciendo referencia a lavariable.

    1003

    X

    ..

    .

    Memoria

    Variable enmemoria

    Direccin dememoria

    1000

    1001

    10021003

    1004

  • 7/26/2019 Punteros en C++ - Parte II

    3/37

    Punteros

    Cmo declarar punteros?

    Sintaxis:

    *;

  • 7/26/2019 Punteros en C++ - Parte II

    4/37

    Punteros

    Cmo declarar punteros?

    Sintaxis:

    *;

  • 7/26/2019 Punteros en C++ - Parte II

    5/37

    Punteros

    Cmo declarar punteros?

    Sintaxis:

    *;

    int

    chardoublefloat

  • 7/26/2019 Punteros en C++ - Parte II

    6/37

    Punteros

    Cmo declarar punteros?

    Sintaxis:

    *;

    int

    chardoublefloat

  • 7/26/2019 Punteros en C++ - Parte II

    7/37

    Punteros

    Cmo declarar punteros?

    Sintaxis:

    *;

    int

    chardoublefloat

    Nombre de la variable

  • 7/26/2019 Punteros en C++ - Parte II

    8/37

    Punteros

    Cmo declarar punteros?

    Sintaxis:

    *;

    int

    chardoublefloat

    Simbolo indicador

    Nombre de la variable

  • 7/26/2019 Punteros en C++ - Parte II

    9/37

    Punteros

    Ejemplo:

    int*pValor;char*pNombre;double*pSaldo;

    Error comn:

    int*pValorA, pValorB, pValorC;

    Puntero de tipo entero

    Son variablesde tipo entero(NOpunteros).

  • 7/26/2019 Punteros en C++ - Parte II

    10/37

    Punteros

    Cuando se trabaja con punteros es necesario utilizar

    dos operadores:A. Operador de referencia o direccin: (&)

    Este operador unario tiene como finalidad

    obtener la direccin de su operando(Recordemos que los operadores unarios solorequieren de un operando).

    Sintaxis de uso: = &;

  • 7/26/2019 Punteros en C++ - Parte II

    11/37

    Punteros

    A. Operador de indireccin: (*)

    Este es el complemento del operador &, esteoperador nos permite realizar dos tipos deoperaciones con la informacin a la que estahaciendo referencia el puntero.

    Leer los datos que estn en la direccinde memoria a la que esta haciendoreferencia el puntero.

    Modificar los datos que estn en ladireccin de memoria a la que esthaciendo referencia el puntero.

  • 7/26/2019 Punteros en C++ - Parte II

    12/37

    Punteros

    1. Declarar un puntero e inicializarlo

    intValor = 20;int*pValor = NULL;pValor = &Valor; // Obtenemos la direccin de memoria

    1

    2

    3

  • 7/26/2019 Punteros en C++ - Parte II

    13/37

    Punteros

    1. Declarar un puntero e inicializarlo

    intValor = 20;int*pValor = NULL;pValor = &Valor; // Obtenemos la direccin de memoria

    1

    2

    3

    1

  • 7/26/2019 Punteros en C++ - Parte II

    14/37

    Punteros

    1. Declarar un puntero e inicializarlo

    intValor = 20;int*pValor = NULL;pValor = &Valor; // Obtenemos la direccin de memoria

    20

    Valor1000

    1

    2

    3

    1

    Direccin dememoria

  • 7/26/2019 Punteros en C++ - Parte II

    15/37

    Punteros

    1. Declarar un puntero e inicializarlo

    intValor = 20;int*pValor = NULL;pValor = &Valor; // Obtenemos la direccin de memoria

    20

    Valor1000

    1

    2

    3

    1 2

    Direccin dememoria

  • 7/26/2019 Punteros en C++ - Parte II

    16/37

    Punteros

    1. Declarar un puntero e inicializarlo

    intValor = 20;int*pValor = NULL;pValor = &Valor; // Obtenemos la direccin de memoria

    20

    Valor1000

    pValor

    1

    2

    3

    10011 2NULL

    Direccin dememoria

  • 7/26/2019 Punteros en C++ - Parte II

    17/37

    Punteros

    1. Declarar un puntero e inicializarlo

    intValor = 20;int*pValor = NULL;pValor = &Valor; // Obtenemos la direccin de memoria

    20

    Valor1000

    pValor

    1

    2

    3

    10011 2NULL 3

    Direccin dememoria

  • 7/26/2019 Punteros en C++ - Parte II

    18/37

    Punteros

    1. Declarar un puntero e inicializarlo

    intValor = 20;int*pValor = NULL;pValor = &Valor; // Obtenemos la direccin de memoria

    20

    Valor1000

    pValor

    1

    2

    3

    10011 2 31000

    Direccin dememoria

  • 7/26/2019 Punteros en C++ - Parte II

    19/37

    Punteros

    1. Declarar un puntero e inicializarlo

    intValor = 20;int*pValor = NULL;pValor = &Valor; // Obtenemos la direccin de memoria

    20

    Valor1000

    pValor

    1

    2

    3

    10011 2 31000

    Referencia aValor

    Direccin dememoria

  • 7/26/2019 Punteros en C++ - Parte II

    20/37

    Punteros

    2. Modificar los datos de la memoria utilizando lareferencia del puntero.

    intValor = 20;int*pValor = NULL;pValor = &Valor;*pValor = 50; // Modificando de Forma Indirecta

    Valor1000

    pValor

    1

    2

    3

    1001

    4

    100020

    Direccin dememoria

  • 7/26/2019 Punteros en C++ - Parte II

    21/37

    Punteros

    2. Modificar los datos de la memoria utilizando lareferencia del puntero.

    intValor = 20;int*pValor = NULL;pValor = &Valor;*pValor = 50; // Modificando de Forma Indirecta

    Valor1000

    pValor

    1

    2

    3

    10014

    4

    100020

    Direccin dememoria

  • 7/26/2019 Punteros en C++ - Parte II

    22/37

    Punteros

    2. Modificar los datos de la memoria utilizando lareferencia del puntero.

    intValor = 20;int*pValor = NULL;pValor = &Valor;*pValor = 50; // Modificando de Forma Indirecta

    Valor1000

    pValor

    1

    2

    3

    10014

    4

    1000

    Direccin dememoria

  • 7/26/2019 Punteros en C++ - Parte II

    23/37

    Punteros

    2. Modificar los datos de la memoria utilizando lareferencia del puntero.

    intValor = 20;int*pValor = NULL;pValor = &Valor;*pValor = 50; // Modificando de Forma Indirecta

    Valor1000

    pValor

    1

    2

    3

    10014

    4

    100050

    Direccin dememoria

  • 7/26/2019 Punteros en C++ - Parte II

    24/37

    Punteros

    2. Modificar los datos de la memoria utilizando lareferencia del puntero.

    intValor = 20;int*pValor = NULL;pValor = &Valor;*pValor = 50; // Modificando de Forma Indirecta

    Valor1000

    pValor

    1

    2

    3

    10014

    4

    100050

    Estamos modificando el dato almacenado en la variableValor de forma indirecta.

    Direccin dememoria

  • 7/26/2019 Punteros en C++ - Parte II

    25/37

    Punteros

    2. Modificar los datos de la memoria utilizando lareferencia del puntero.

    intValor = 20;int*pValor = NULL;pValor = &Valor;*pValor = 50; // Modificando de Forma Indirecta

    Valor1000

    pValor

    1

    2

    3

    10014

    4

    100050

    Estamos modificando el dato almacenado en la variableValor de forma indirecta.

    5 Valor = 70; //Forma directa

    Direccin dememoria

  • 7/26/2019 Punteros en C++ - Parte II

    26/37

    Punteros

    2. Leer los datos de la memoria utilizando lareferencia del puntero.

    intValorA, ValorB = 20, ValorC;int*pValor = NULL;pValor = &ValorB;ValorA = *pValor; // Leer de Forma IndirectaValorC = ValorA + *pValor + 10;

    1

    2

    3

    4

    5

    ValorA ValorB ValorC pValor

    No 1001 1002 1003 1004

    1

    2

    3

    4

    5

  • 7/26/2019 Punteros en C++ - Parte II

    27/37

    Punteros

    2. Leer los datos de la memoria utilizando lareferencia del puntero.

    intValorA, ValorB = 20, ValorC;int*pValor = NULL;pValor = &ValorB;ValorA = *pValor; // Leer de Forma IndirectaValorC = ValorA + *pValor + 10;

    1

    2

    3

    4

    5

    ValorA ValorB ValorC pValor

    No 1001 1002 1003 1004

    1

    2

    3

    4

    5

    ? 20 ?

  • 7/26/2019 Punteros en C++ - Parte II

    28/37

    Punteros

    2. Leer los datos de la memoria utilizando lareferencia del puntero.

    intValorA, ValorB = 20, ValorC;int*pValor = NULL;pValor = &ValorB;ValorA = *pValor; // Leer de Forma IndirectaValorC = ValorA + *pValor + 10;

    1

    2

    3

    4

    5

    ValorA ValorB ValorC pValor

    No 1001 1002 1003 1004

    1

    2

    3

    4

    5

    ? 20 ? NULL

  • 7/26/2019 Punteros en C++ - Parte II

    29/37

    Punteros

    2. Leer los datos de la memoria utilizando lareferencia del puntero.

    intValorA, ValorB = 20, ValorC;int*pValor = NULL;pValor = &ValorB;ValorA = *pValor; // Leer de Forma IndirectaValorC = ValorA + *pValor + 10;

    1

    2

    3

    4

    5

    ValorA ValorB ValorC pValor

    No 1001 1002 1003 1004

    1

    2

    3

    4

    5

    ? 20 ? NULL1002

  • 7/26/2019 Punteros en C++ - Parte II

    30/37

    Punteros

    2. Leer los datos de la memoria utilizando lareferencia del puntero.

    intValorA, ValorB = 20, ValorC;int*pValor = NULL;pValor = &ValorB;ValorA = *pValor; // Leer de Forma IndirectaValorC = ValorA + *pValor + 10;

    1

    2

    3

    4

    5

    ValorA ValorB ValorC pValor

    No 1001 1002 1003 1004

    1

    2

    3

    4

    5

    ? 20 ? NULL

    201002

  • 7/26/2019 Punteros en C++ - Parte II

    31/37

    Punteros

    2. Leer los datos de la memoria utilizando lareferencia del puntero.

    intValorA, ValorB = 20, ValorC;int*pValor = NULL;pValor = &ValorB;ValorA = *pValor; // Leer de Forma IndirectaValorC = ValorA + *pValor + 10;

    1

    2

    3

    4

    5

    ValorA ValorB ValorC pValor

    No 1001 1002 1003 1004

    1

    2

    3

    4

    5

    ? 20 ? NULL

    2050

    1002

  • 7/26/2019 Punteros en C++ - Parte II

    32/37

    Punteros

    Ejercicio:

    intValorA = 10, ValorB = 30, ValorC;int*pValor = NULL;pValor = &ValorA;ValorB = *pValor + *pValor;ValorC = ValorB + 5 + *pValor + 20;

    1

    2

    3

    4

    5

    ValorA ValorB ValorC pValor

    No 1001 1002 1003 1004

    1

    2

    3

    4

    5

  • 7/26/2019 Punteros en C++ - Parte II

    33/37

    Punteros

    Ejercicio:

    intValorA = 10, ValorB = 30, ValorC;int*pValor = NULL;pValor = &ValorA;ValorB = *pValor + *pValor;ValorC = ValorB + 5 + *pValor + 20;

    1

    2

    3

    4

    5

    ValorA ValorB ValorC pValor

    No 1001 1002 1003 1004

    1

    2

    3

    4

    5

    10 30 ?

  • 7/26/2019 Punteros en C++ - Parte II

    34/37

    Punteros

    Ejercicio:

    intValorA = 10, ValorB = 30, ValorC;int*pValor = NULL;pValor = &ValorA;ValorB = *pValor + *pValor;ValorC = ValorB + 5 + *pValor + 20;

    1

    2

    3

    4

    5

    ValorA ValorB ValorC pValor

    No 1001 1002 1003 1004

    1

    2

    3

    4

    5

    10 30 ? NULL

  • 7/26/2019 Punteros en C++ - Parte II

    35/37

    Punteros

    Ejercicio:

    intValorA = 10, ValorB = 30, ValorC;int*pValor = NULL;pValor = &ValorA;ValorB = *pValor + *pValor;ValorC = ValorB + 5 + *pValor + 20;

    1

    2

    3

    4

    5

    ValorA ValorB ValorC pValor

    No 1001 1002 1003 1004

    1

    2

    3

    4

    5

    10 30 ? NULL1001

  • 7/26/2019 Punteros en C++ - Parte II

    36/37

    Punteros

    Ejercicio:

    intValorA = 10, ValorB = 30, ValorC;int*pValor = NULL;pValor = &ValorA;ValorB = *pValor + *pValor;ValorC = ValorB + 5 + *pValor + 20;

    1

    2

    3

    4

    5

    ValorA ValorB ValorC pValor

    No 1001 1002 1003 1004

    1

    2

    3

    4

    5

    10 30 ? NULL

    201001

  • 7/26/2019 Punteros en C++ - Parte II

    37/37

    Punteros

    Ejercicio:

    intValorA = 10, ValorB = 30, ValorC;int*pValor = NULL;pValor = &ValorA;ValorB = *pValor + *pValor;ValorC = ValorB + 5 + *pValor + 20;

    1

    2

    3

    4

    5

    ValorA ValorB ValorC pValor

    No 1001 1002 1003 1004

    1

    2

    3

    4

    5

    10 30 ? NULL

    2055

    1001