Upload
yasman-machaca-huanacuni
View
241
Download
0
Embed Size (px)
DESCRIPTION
manual
Citation preview
7/17/2019 Introduccion C++
http://slidepdf.com/reader/full/introduccion-c-568cf0d909e4b 1/37
Apuntadores. Paso deparámetros a funciones por
referencia
7/17/2019 Introduccion C++
http://slidepdf.com/reader/full/introduccion-c-568cf0d909e4b 2/37
simples• Char
• int
• float
Estructurado
• Arreglo
Tipos de datos
La declaración de una variables, en un programa, bloque,módulo o subprograma, especifica el tipo de dato al que
corresponde el alor que se almacena en ella, as! como su
identificador o nombre.
7/17/2019 Introduccion C++
http://slidepdf.com/reader/full/introduccion-c-568cf0d909e4b 3/37
Tipos de datos simples
Los tipos de datos simples se caracterizan porque
se les accede sólo con especificar su nombre.
Ejemplo:
int a;
a = 10;
cout a;
!ero esta no es la "nica forma de acceder a los
valores en un pro#rama.
7/17/2019 Introduccion C++
http://slidepdf.com/reader/full/introduccion-c-568cf0d909e4b 4/37
$ada una lista de % n"meros enteros entrados por elteclado& muestre todos los que est'n por encima del valor
promedio entrado.
Ejemplo
const ma(lista=);
void main*+
,
int lista-ma(lista;
...
/
7/17/2019 Introduccion C++
http://slidepdf.com/reader/full/introduccion-c-568cf0d909e4b 5/37
Esto se garanti"a a tra#s de un tipo de
dato conocido como apuntador o puntero.
tro mecanismo de acceso a algunos de los alores
definidos en una aplicación
Acceso a alores a tra#s de su
dirección& para leer o escribirsu alor
7/17/2019 Introduccion C++
http://slidepdf.com/reader/full/introduccion-c-568cf0d909e4b 6/37
Entorno $indo%s&'(. Almacenamiento
Contiene el código )algoritmo* e+ecutable todos los alores que
pueden ser resueltos en tiempo de compilación, como es el caso
de algunas constantes que no reciben un Lalue. -ecordemos
que en esta "ona está el código de todas las funciones
Contiene datos estáticos iniciali"ados, como ariables declaradas
fuera de cualquier función )ámbito de fichero* o de ámbito de
función declaradas estáticas. Cadenas literales nmerosdecimales )de punto flotante*.
Análogos a los anteriores pero sin iniciali"ación. Por e+emplo/ariables declaradas fuera de cualquier función )ámbito de
fichero*, o con ámbito de función que hubiesen sido declaradas
estáticas
Almacenan las ariables locales automáticas los datos
inolucrados en el mecanismo de inocación de funciones... etc
0e usa para la asignación dinámica de memoria ...
7/17/2019 Introduccion C++
http://slidepdf.com/reader/full/introduccion-c-568cf0d909e4b 7/37
Apuntador o puntero
Es una ariable cuo alor es una dirección de memoria enla que se almacena un dato necesario para elprocesamiento
1Tipo2 3 1identificador2
Ejemplo
int !2ontador& 2antidad;
7/17/2019 Introduccion C++
http://slidepdf.com/reader/full/introduccion-c-568cf0d909e4b 8/37
int !2ontador& 2antidad;
• PContador , Es un apuntador a un
alor entero o sea almacenará la dirección
en memoria donde se encuentra un alorentero.
2antidad& Es una variable entera o sea
almacenar3 directamente un valor entero
7/17/2019 Introduccion C++
http://slidepdf.com/reader/full/introduccion-c-568cf0d909e4b 9/37
Ejemplos de declaraciones
int !Entero& Entero;
int !Entero1& !Entero4;
void !untero;
Entero = 10;
!Entero1 = !Entero4 = !Entero = %5LL;
!untero = !Entero;
7/17/2019 Introduccion C++
http://slidepdf.com/reader/full/introduccion-c-568cf0d909e4b 10/37
62ómo dar valor a una variable apuntador 7
A tra#s del 4perador de direccionamiento,
representado por el s!mbolo 567.
E+emplo
int Entero8
int 3 PEntero8
PEntero 9 8Entero8
7/17/2019 Introduccion C++
http://slidepdf.com/reader/full/introduccion-c-568cf0d909e4b 11/37
0e usa, el operador 537.
62ómo acceder a un alor apuntado por un puntero 7
7/17/2019 Introduccion C++
http://slidepdf.com/reader/full/introduccion-c-568cf0d909e4b 12/37
E+emplo:;. <iga cuál es la salida que se obtiene
:include 1iostream.h2
:include 1conio.h2
int main)int argc, char3 arg=>*?
int Entero; 9;8
int 3 PEntero 9 @LL8
Entero; 9 B8
PEntero 9 6Entero;8
Entero;9;8
cout 11 3PEntero8
getch)*8
return D8
;
Entero ;
PEntero
DD;(FF
B
Entero ;
B
Entero ;
PEntero
DD;(FF
;
Entero ;
3PEntero
@LL
PEntero
7/17/2019 Introduccion C++
http://slidepdf.com/reader/full/introduccion-c-568cf0d909e4b 13/37
<eclarando más de un puntero
9nt edad;
int !Entero1& !Entero4;
n puntero puede ser iniciali"ado con tres alores
posibles/D, %5LL o la dirección de memoria de una
ariable anónima.
float !estatura = %5LL
7/17/2019 Introduccion C++
http://slidepdf.com/reader/full/introduccion-c-568cf0d909e4b 14/37
Gniciali"ando un puntero
int HalorEntero 9 IB8
int 3PEntero 9 6HalorEntero
7/17/2019 Introduccion C++
http://slidepdf.com/reader/full/introduccion-c-568cf0d909e4b 15/37
5so de const con punteros
• Para declarar un apuntador constante a
datos no constantes.
• Para declarar un apuntador no constante
a datos constantes.
• Para declarar un apuntador constante a
datos constantes
@iel distinto de priilegios de acceso a los
datos apuntados
7/17/2019 Introduccion C++
http://slidepdf.com/reader/full/introduccion-c-568cf0d909e4b 16/37
Apuntador constante a datos no constantes
0e declara un apuntador que siempre apunta
a la misma posición de memoria, los datos
en esa posición pueden ser modificados a
tra#s de #ste.
Ejemploint J,8
int 3 const P" 9 68
Tiene que ser iniciali"ado cuando se declara
:i l d i h
7/17/2019 Introduccion C++
http://slidepdf.com/reader/full/introduccion-c-568cf0d909e4b 17/37
E+emplo:include 1iostream.h2
:include 1conio.h2
int main)*?
int J 9;,8
int 3 const p" 9 6J8J 9 B8
p"968 ErrorKKKK
cout 11 3p"8
getch)*8
return D8
7/17/2019 Introduccion C++
http://slidepdf.com/reader/full/introduccion-c-568cf0d909e4b 18/37
Apuntador no constante a datos constantes
n apuntador que puede ser modificado para apuntar a
cualquier ariable del tipo especificado, pero los datos hacialos cuales apunta no pueden ser modificados
const int 3p"8
@4 Tiene que ser iniciali"ado cuando se declara
7/17/2019 Introduccion C++
http://slidepdf.com/reader/full/introduccion-c-568cf0d909e4b 19/37
:include 1iostream.h2
:include 1conio.h2
int main)*?
int J 9;8
const int 3 p"8
p" 9 6J83p" 9 8
J 9 B8
cout 11 3p"8
getch)*8
return D8
E
7/17/2019 Introduccion C++
http://slidepdf.com/reader/full/introduccion-c-568cf0d909e4b 20/37
Apuntador constante a datos constantes
El apuntador siempre apunta a la misma
dirección de memoria, el dato que ocupa
esa posición no puede ser modificado
int J 9 8
const int 3 const p" 9 6J8
7/17/2019 Introduccion C++
http://slidepdf.com/reader/full/introduccion-c-568cf0d909e4b 21/37
:include 1iostream.h2
:include 1conio.h2
int main)*?
int J 9;,8
const int 3 const p" 9 6J8
cout 11 3p"8 3p" 98
p"968
getch)*8
return D8
Tiene que ser iniciali"ado cuando se declara
E
7/17/2019 Introduccion C++
http://slidepdf.com/reader/full/introduccion-c-568cf0d909e4b 22/37
Aritm#tica de apuntadores
• Gncremento decremento )MM o &&*.
• Adición o sustracción de un entero a un
apuntador )M o M9 , & o & 9*.
• 0ustracción de un apuntador de otro.
Estas operaciones de la aritm#tica de apuntadores no
tienen significado, a menos que se e+ecuten en un
arreglo.
7/17/2019 Introduccion C++
http://slidepdf.com/reader/full/introduccion-c-568cf0d909e4b 23/37
Punteros Arreglos
Cuando declaramos un arreglo estamos haciendoarias cosas a la e"/
• <eclaramos un puntero del mismo tipo de los
elementos del arreglo, que apunta al primerelemento del arreglo.
•-eseramos memoria para todos loselementos del arreglo estos se almacenan
internamente en el ordenador en posiciones
consecutias de la memoria
P A l
7/17/2019 Introduccion C++
http://slidepdf.com/reader/full/introduccion-c-568cf0d909e4b 24/37
Punteros Arreglos
int Arreglo=>8
int 3 PArreglo 9 Arreglo8
int 3 PArreglo 9 6Arreglo=D>8
int 3 PArreglo( 9 6Arreglo=I>
0ignifican lo mismo
!<rre#lo =4;
!<rre#lo ;
!<rre#lo 9 6Arreglo=PArreglo(& PArreglo>
0egn la secuencia PArreglo apunta al/
'
&(
I ' &( ;D
Arreglo
'
7/17/2019 Introduccion C++
http://slidepdf.com/reader/full/introduccion-c-568cf0d909e4b 25/37
<puntadores > arre#los
El nombre de un arre#lo funciona como un
apuntador constante que contiene la
dirección del primer elemento del arre#lo *elreferenciado con el sub?ndice 0+.
Ejemplo:
int <rre#lo-10;
int !<rre#lo = <rre#lo;
int !<rre#lo1 = 8<rre#lo-0;
7/17/2019 Introduccion C++
http://slidepdf.com/reader/full/introduccion-c-568cf0d909e4b 26/37
:include1iostream.h2
:include1conio.h2
const total98
int main)*
? int arreglo=total>8
int 3listado9arreglo8
for )int i9D8i1total 8iMM*?
cout 11 5Entre :N11iM;8 cin 223listado8
listadoMM8
clrscr)*8 listado9arreglo8
cout 11N Listado entradoOnN8
for )int i9D8i1total 8iMM*?
cout 11 3listado11NOnN8
listadoMM8
getch)*8
return D8
Almacenar muestra un listado de
elementos entrados por la
consola
7/17/2019 Introduccion C++
http://slidepdf.com/reader/full/introduccion-c-568cf0d909e4b 27/37
Errores comunes
Los errores m3s frecuentes al utilizar
aritm'tica de apuntadores son:
• 5tilizar aritm'tica de apuntadores en unapuntador que no se refiere a un arre#lo de
valores.• estar o comparar dos apuntadores que no
se refieren al mismo arre#lo.• @alirse de cualquiera de los dos e(tremos de
un arre#lo al utilizar aritm'tica de
apuntadores
7/17/2019 Introduccion C++
http://slidepdf.com/reader/full/introduccion-c-568cf0d909e4b 28/37
$eclarando apuntadores
!ara declarar una variable apuntadora #en'rica se
escribe la palabra reservada void se#uida del
operador asterisco *+ > lue#o el nombre de la
variable.
void nombreA
7/17/2019 Introduccion C++
http://slidepdf.com/reader/full/introduccion-c-568cf0d909e4b 29/37
5n apuntador puede ser asi#nado a otro si son delmismo tipo o si al menos uno de los dos es un
apuntador #en'rico *declarado void +.
En cualquier otro caso debe especificarse conversión
e(pl?cita de tipos.Ejemplo:
int !9nt; cBar !2Bar; void !;
!9nt = C;
! = !9nt;!2Bar = Dc;
!9nt = *int +!2Bar; FF !9nt vale GG
<si#nación de apuntadores
7/17/2019 Introduccion C++
http://slidepdf.com/reader/full/introduccion-c-568cf0d909e4b 30/37
Los apuntadores pueden ser comparados con
operadores relacionales * =& A=& A& & == > =+.
2omparar apuntadores equivale a comparar losvalores de las direcciones que est3n contenidas en
ellos.
Ejemplo:
int <-10int !1 = 8<-4& !4 = 8<-H;
!1 = !4; FF $evuelve Ierdadero
2omparación de apuntadores
7/17/2019 Introduccion C++
http://slidepdf.com/reader/full/introduccion-c-568cf0d909e4b 31/37
Arreglo de cadenas,
char 3@ombrees=;(> 9
?NEneroN,NFebreroN,Nar"oN,NAbrilN,NaoN,NQunioN, NQulioN, NAgostoN, N0eptiembreN,
54ctubreN, N@oiembreN,N<iciembreN8
Cada uno de estos alores están almacenado en memoria
como una cadena de caracteres terminada en @LL )RODS*.
7/17/2019 Introduccion C++
http://slidepdf.com/reader/full/introduccion-c-568cf0d909e4b 32/37
!ar3metros a funciones
En 2 todos los par3metros a funciones son
pasados por valor. Esto si#nifica que se crea una
copia del valor del par3metro real para que sea usado
en el cuerpo de la función.
@i se desea que una función modifique una variable >
la modificación permanezca despu's de que la
función termine& debe pasarse como par3metro a lafunción un apuntador o referencia a la variable.
Esta forma de pasar par3metros se conoce como
paso de parámetros por referencia.
7/17/2019 Introduccion C++
http://slidepdf.com/reader/full/introduccion-c-568cf0d909e4b 33/37
!ar3metros a funciones
2omo en 2 los arre#los son interpretados comoapuntadores al primer elemento del arre#lo& todos los
par3metros de arre#los son pasados por referencia
En el paso de par3metros por referencia& se puede
combinar el uso del modificador const para lo#rar quelos valores apuntados no puedan ser modificados
*como vimos en la conferencia anterior+. El principio
m3s sano a se#uir es el de otor#ar a la función la
posibilidad de modificar los par3metros reales sólo sies estrictamente necesario.
Este principio se conoce como principio de mínimo
privilegio.
7/17/2019 Introduccion C++
http://slidepdf.com/reader/full/introduccion-c-568cf0d909e4b 34/37
4perador %eJ > $elete
%eJ/ es un operador que deuele un puntero a la
memoria asignada dinámicamente, que debe sersuficientemente grande como para contener al
ob+eto de tipo t>pe.
Sintaxis/
pKvar 9ne% tpe8
$elete/ libera la memoria
Sintaxis/ delete p&ar8
oid main)*
7/17/2019 Introduccion C++
http://slidepdf.com/reader/full/introduccion-c-568cf0d909e4b 35/37
oid main)*
?
clrscr)*8
int3 HalorEntero9 neJ int 8.
cout 11NEntre numero entero N8
cin 22 3HalorEntero8
cout11NHalor entrado...N11HalorEntero11endl8.
cout11NHalor entrado...N113HalorEntero11endl8delete HalorEntero8
sstem)NpauseN*8
7/17/2019 Introduccion C++
http://slidepdf.com/reader/full/introduccion-c-568cf0d909e4b 36/37
Iectores $in3micos:
Para pedir memoria para más de un elemento la
sintaJis de neJ delete cambia
Nueva sintaxis:
p&ar 9 neJ tpe =tamao>8
delete =tamao>p&ar8 ó delete =>p&ar8
<ada una lista de @ nmeros enteros entrados por el teclado, muestre todos
7/17/2019 Introduccion C++
http://slidepdf.com/reader/full/introduccion-c-568cf0d909e4b 37/37
<ada una lista de @ nmeros enteros entrados por el teclado, muestre todos
los que est#n por encima del alor promedio entrado.
void main*+
,
int ma(lista;
cout2antidad de elementos: ;
cin AA ma(lista;
clrscr*+;
int lista;lista = neJ int-ma(lista;
...
/