Академический Документы
Профессиональный Документы
Культура Документы
Estructura de Datos 1
Punteros
Objetivos
AB001
AB002
Variable La segunda vez que se ejecuta el
AB003 programa
AB004
AB005
Variable
AB006 La primera vez que se ejecuta el
AB007 programa
N-1
N
Analogía de la memoria
Analogía de la memoria
Un teatro La memoria
• Una persona desea ingresar a • Una variable desea ingresar a
un teatro. la memoria del computador.
• El acomodador (personal • El sistema operativo busca un
encargado de la ubicación) espacio disponible y ubica a la
busca un espacio disponible y variable en dicho espacio.
ubica a la persona en dicho • En la próxima ejecución, el
espacio. Sistema Operativo
• En la próxima función de probablemente ubicará a la
teatro, el acomodador variable en un lugar distinto
probablemente ubicará a la dependiendo de la
persona en un lugar distinto disponibilidad en la memoria.
dependiendo de la
disponibilidad en el teatro.
Asignación en C++
Asignación en C
• Cuando hacemos una aplicación, declaramos diversas
variables, por ejemplo:
• char x;
• int y;
• float z;
• Pero recuerda que….
• Cada variable, según el tipo de dato, ocupa una cantidad distinta
de bytes en memoria
Memoria del computador
Dirección Valor
AB001
Al declarar una variable, el
AB002 S.O le asigna la mejor
AB003
AB004
ubicación posible en memoria
AB005
AB006
AB007
AB008
▫ char x;
AB009
AB00A
▫ int y;
AB00B
AB00C ▫ float z;
AB00D
AB00E
AB00F
AB010
AB011
AB012
AB013
AB014
.
.
N
Asignación en C++
Dirección Valor
AB001
Luego de declarar las
AB002 variables, recién podemos
z AB003
AB004
asignarle un valor
AB005
AB006
AB007 ▫ x = ‘A’;
AB008
AB009 ▫ y = 17;
AB00A
AB00B ▫ z = 15.8;
y AB00C
AB00D
AB00E
AB00F
AB010
AB011
AB012
x AB013
AB014
.
.
N
Asignación en C++
Dirección Valor • Referenciamos a las
AB001
AB002 variables por su nombre
z AB003
AB004 15.8 para imprimirlas
AB005
AB006 •cout<< x;
AB007
AB008 •cout<< y;
AB009
AB00A •cout<< z;
AB00B
y AB00C
AB00D 17 • Referenciamos a las
AB00E variables por su nombre
AB00F
AB010 cuando vamos a almacenar
AB011
AB012 un valor en ellas
x AB013 ‘A’
AB014 •cin>> x;
.
.
N
•cin>> y;
•cin>> z;
Asignación en C ++
• Existen otro tipos de variables a los ya
tradicionales
• Estas variables no almacenan un dato char o
int o double o float, almacenan direcciones
de memoria
• Las variables que almacenan direcciones de
memoria, reciben el nombre de puntero o
variable dinámica.
Punteros
Punteros
SI!
Comando de indirección
Comando de Indirección
Dirección Valor
AB001 A partir de un puntero que almacena
AB002 una dirección de memoria podemos
AB003
AB004
usar el comando de indirección (*):
AB005
AB006
AB007
AB008
* ptrentero
y
AB009
AB00A
14 Anteponer * al nombre del puntero
AB00B
AB00C significa: “El valor apuntado por ”
AB00D
AB00E
AB00F
AB010
ptrentero AB011
AB008
Y cómo funciona????
AB012
AB013
AB014
.
.
N
Comando de Indirección
Dirección Valor El comando es utilizado para, a
AB001 partir, de una dirección de memoria
AB002 obtener el valor allí almacenado .
AB003
AB004
AB005
AB006 Se puede usar para:
AB007
AB008 Imprimir el valor:
AB009
y AB00A
14
AB00B
AB00C cout<< *ptrentero;
AB00D
AB00E
AB00F
AB010
AB011
ptrentero AB012
AB008
AB013
AB014
.
.
N
Comando de Indirección
Dirección Valor
AB001 El comando es utilizado para, a
AB002
AB003
partir, de una dirección de memoria
AB004 obtener el valor allí almacenado .
AB005
AB006
AB007
AB008
Se puede usar para:
y
AB009
AB00A
14 Alterar el Valor :
AB00B
AB00C
AB00D
AB00E
AB00F
AB010
15
AB011
ptrentero AB012
AB008
AB013
AB014 *ptrentero= *ptrentero +1;
.
.
N
Ejercicios
Ejemplo 1
#include <iostream>
#include <conio.h>
using namespace std;
void main()
{
int varA;
int varB;
varA = 90;
varB = 120;
cout<<"varA = " << varA << " y su direccion es: " << &varA << "\n";
cout<<"varB = " << varB << " y su direccion es: " << &varB << "\n";
getch();
}
Ejemplo 2
void main()
{
int varA;
int varB;
varA = 90;
varB = 120;
cout<<"varA = " << varA << " y su direccion es: " << &varA << "\n";
cout<<"varB = " << varB << " y su direccion es: " << &varB << "\n";
int *pA = &varA; // declara la variable puntero pA y le asigna un valor
int *pB; // declara la variable puntero pB
pB = &varB; // le asigna un valor
*pB = 45; // modifica el valor apuntado por pB
cout<<"varA = " << *pA << " y su direccion es: " << pA << "\n";
cout<<"varB = " << *pB << " y su direccion es: " << pB << "\n";
getch();
}
Parámetros de una función
Parámetros por valor
Se crean copias de
n1 n2 resultado n1 y n2 en a y b
20 30 50
a b
void main()
{ 20 30
int n1 = 20;
int DameSuma(int a, int b)
int n2 = 30;
{
int suma = a + b;
int resultado= DameSuma(n1, n2);
return suma;
}
cout<<“La suma es “ <<resultado; sum
a
_getch(); 50
}
void main() a b
{
int n1 = 20;
int n2 = 30; int DameSuma(int &a, int &b)
{
int suma = a + b;
int resultado = DameSuma(n1, n2); return suma;
}
cout<<“La suma es ”<<resultado;
suma
_getch(); 50
}
Parámetros por referencia puntero
NO se crean copias, la
función opera con p1 y
con p2 directamente:
p1 p2 resultado
mediante sus
20 30 50 referencias.
void main()
{ a b
int n1 = 20;
int n2 = 30;
int *p1, *p2; int DameSuma(int *a, int *b)
p1 = &n1; {
int suma = *a + *b;
p2 = &n2;
return suma;
int resultado = DameSuma(p1, p2);
}
cout<<“La suma es ”<<resultado; suma
50
_getch();
}
FIN