37
  Apuntadores. Paso de parámetros a funciones por referencia

Introduccion C++

Embed Size (px)

DESCRIPTION

manual

Citation preview

Page 1: Introduccion C++

7/17/2019 Introduccion C++

http://slidepdf.com/reader/full/introduccion-c-568cf0d909e4b 1/37

 

 Apuntadores. Paso deparámetros a funciones por

referencia

Page 2: Introduccion C++

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.

Page 3: Introduccion C++

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.

Page 4: Introduccion C++

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;

  ...

/

Page 5: Introduccion C++

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 

Page 6: Introduccion C++

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 ...

Page 7: Introduccion C++

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;

Page 8: Introduccion C++

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 

Page 9: Introduccion C++

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;

Page 10: Introduccion C++

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

Page 11: Introduccion C++

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

Page 12: Introduccion C++

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

Page 13: Introduccion C++

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 

Page 14: Introduccion C++

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

Page 15: Introduccion C++

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

Page 16: Introduccion C++

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

Page 17: Introduccion C++

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

Page 18: Introduccion C++

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

Page 19: Introduccion C++

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

Page 20: Introduccion C++

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

Page 21: Introduccion C++

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

Page 22: Introduccion C++

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.

Page 23: Introduccion C++

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

Page 24: Introduccion C++

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

'

Page 25: Introduccion C++

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;

Page 26: Introduccion C++

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

Page 27: Introduccion C++

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

Page 28: Introduccion C++

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

Page 29: Introduccion C++

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

Page 30: Introduccion C++

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

Page 31: Introduccion C++

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*.

Page 32: Introduccion C++

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.

Page 33: Introduccion C++

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.

Page 34: Introduccion C++

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)*

Page 35: Introduccion C++

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

Page 36: Introduccion C++

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

Page 37: Introduccion C++

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;

...

/