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
Top Related