SlideShare uma empresa Scribd logo
1 de 18
C/C++ Punteros. Dirección. In dirección. Aritmética de direcciones.
Índice.
 Revisando conceptos acerca de la
memoria.
 Las variables en los programas.
 Punteros y direcciones.
 Aritmética de punteros.
 Estructuras y Uniones.
 Extendiendo los conceptos a funciones.
C/C++ Punteros. Dirección. In dirección. Aritmética de direcciones.
 La memoria es un conjunto de celdas contiguas donde se almacenan datos.
 La unidad de memoria más pequeña es el bit.
 El byte es un conjunto de 8 bits. Unidad de memoria.
 El lugar (ubicación) de cada byte es único y es su dirección.
 Si los bytes son consecutivos la dirección se ira incrementando
secuencialmente.
 Cada celda tiene dos valores asociados: Dirección y Contenido.
Memoria.
1 2 3 4 5 6 7 8 9 A B C D E F
1 0 1 1 0 0 1 1
171 186 137 99
10101011 10111010 10001001 1100011
Dirección:0xC100
Dirección +1: 0xC101
Dirección + 3: 0xC103
Celda: Valor Decimal
Celda: Valor Binario
C/C++ Punteros. Dirección. In dirección. Aritmética de direcciones.
Variables
 Una variable es una porción de memoria identificada por un nombre.
 El tipo de dato define su representación binaria y longitud.
 Tiene tres valores asociados: Nombre, Contenido y Dirección.
 Declaramos: “int n=1523, m=121;”
 Contenido:
 n  1523
 m  121
 Dirección:
 &n  C102
 &m  C100
 Es contenido binario se codifica (bits) de acuerdo al tipo de variable.
0000000 01111001 00000101 11110011
Dirección: C100 Dirección: C102
Valor: 121 Valor: 1523
C/C++ Punteros. Dirección. In dirección. Aritmética de direcciones.
Tipos de Variables
 El tipo de variable establece:
 Rango de valores que maneja.
 Codificación binaria del dato.
 Cantidad de memoria requerida.
 En todos los casos la dirección de almacenaje es “&variable”.
Declaración Bytes Valor en Memoria Hexa Valor en Memoria Binario
char c = ‘X’; 1 58 1011000
char w[ ] = “hola”; 4+1 68 6F 6C 61 00 01101000 01101111 01101100
01100001 00000000
int n[5] = {555,444,333,222,111} 5x2=10 02 2B 01 BC 01 4D 00 DE 00 6F 00000010 00101011 00000001 10111100
00000001 01001101 00000000 11011110
00000000 01101111
long l[3] = {100,200,300} 3x4=12 00 00 00 64 00 00 00 C8 00 00 01
2C
00000000 00000000 00000000 01100100
00000000 00000000 00000000 11001000
00000000 00000000 00000001 00101100
float f = 3.141592 4 40 49 0F D8 1000000010010010000111111011000
C/C++ Punteros. Dirección. In dirección. Aritmética de direcciones.
Punteros
 Un puntero es una variable cuyo contenido es una dirección.
 Como todas las variable tiene nombre, contenido y dirección.
 Un puntero “apunta a”: un dato, un array, un objeto, una función, etc.
 “int n;” declara una variable entera (16 bits / 2 bytes)
 “int *j;” declara un puntero tipo entero (solo almacena direcciones).
 “j” contiene una dirección donde comienza un entero.
 “*j” valor entero almacenado en la dirección apuntada por “j” (indirección).
 n  contenido=“valor del entero” j  contenido=“valor de la dirección”.
 &n  dirección del entero en “n” *j  contenido en la dirección de “j”.
Valor *j=n  40
j0xA010
Dirección: &j0xF234 Dirección: j  &n 0xA010
Lugar: 2 byte donde esta
almacenado j
Lugar: 2 byte donde esta
almacenado n
Representamos “int n=40, *j=&n;” suponemos que se almacenan:
n en la dirección 0xA010 y j en la dirección 0xF234
C/C++ Punteros. Dirección. In dirección. Aritmética de direcciones.
Algebra de punteros
 Los punteros se usan como cualquier otra variable.
 Su comportamiento es de acuerdo al tipo definido.
 “long n[ ]={40,30,20,10}, *j=n;”
 j se inicializa con &n[0]
 j  &n[0]  0xA010  *j =40
 j++  &n[1]  0xA014  *j =30
 j+2  &n[3]  0xA01C  *j =10
 Si hacemos j=n;
*(j+2)  n[2]  20
 Valor apuntado por j más 2 posiciones
 Como j es tipo long incrementará 8 (4*2) bytes
 El incremento depende del tipo.
 j Tiene un lugar de memoria para su contenido.
 j esta almacenada en &j, ocupa 8/16/32/64 bits de acuerdo al micro.
40 30 20 10
Dirección:
0xA010
Dirección +4
0xA014
Dirección + 12
0xA01C
C/C++ Punteros. Dirección. In dirección. Aritmética de direcciones.
 Un puntero puede almacenar una dirección de otro puntero.
 El valor final apuntado puede obtenerse en forma directa.
 “int n, *j, **p”; hacemos “n=4562”; “j=&n”; “p=&j”;
 Supongamos que:
 &n 0x3021
 &j  0x4310 Entonces:
 &p 0x4F02
 Interpretación:
 Con el valor de p obtiene la dirección de j: *p &j
 Con el valor de j obtiene la dirección de n: *j &n
 Con el tipo de p interpreta el valor de n.
 Esta es la secuencia de  **p
Punteros de Punteros
p  0x4310
*p  j  0x3021
**p  *j  4562
*(*(p))  4562
*( j )  4562
n  4562
C/C++ Punteros. Dirección. In dirección. Aritmética de direcciones.
Punteros de Punteros
**p=*j=n 4562
*p=j 0x3021
p 0x4310
*p=j  0x3021
p0x4310
Dirección: &p0x4F02
Dirección: &j=p0x4310
Lugar: 2 byte donde esta
almacenado p
Lugar: 2 byte donde
esta almacenado j
Representación gráfica de doble indirección
**p=*j=n  4562
Dirección: &n=j0x3021
Lugar: 2 byte donde
esta almacenado n
int n= 4562; &n  0x3021
int *j = &n; &j  0x4310
int **p =&j; &p  0x4F02
C/C++ Punteros. Dirección. In dirección. Aritmética de direcciones.
Uso de Punteros
 Ejemplo de un código, asignación y uso de punteros.
A p se le asigno la dirección 0x14E
A j se le asigno la dirección 0x130
A a1 se le asigno la dirección 0x1902
Compilador C (CodeWarrior)
C/C++ Punteros. Dirección. In dirección. Aritmética de direcciones.
Uso de Punteros
 Como obtiene el valor de **p.
Toma la dirección de p 0x14E
Compilador C (CodeWarrior)
C/C++ Punteros. Dirección. In dirección. Aritmética de direcciones.
Uso de Punteros
 Sumemos “p += 2;”. El valor de **p queda.
Toma la dirección de p 0x14E
Compilador C (CodeWarrior)
C/C++ Punteros. Dirección. In dirección. Aritmética de direcciones.
Introducción a Estructuras
 Cuando definimos arreglos agrupamos datos del mismo tipo.
 “int dni[40], *pv=dni;”
 Asignará 40 * 2 = 80 bytes contiguos para almacenar los 40 enteros
 Con pv puedo navegar sobre el arreglo (array).
 Si necesito asociar varios tipos de datos de una misma entidad (Registro)
 Ejemplo: Registro de exámenes de un turno:
 Acta, Fecha, Materia, Legajo, Nombre, Nota.
 Necesito 6 arreglos para los siete tipos de datos.
 Cada arreglo esta en posiciones de memorias no vinculadas entre si.
 Agregar una entidad implica hacerlo en cada uno y luego rescatar cada dato del
lugar y posición adecuadas.
 Para introducir el concepto de registro, debemos definir un nuevo tipo de datos
(nuestro), que maneje los seis valores “juntos”, asociados y agrupados.
C/C++ Punteros. Dirección. In dirección. Aritmética de direcciones.
Estructuras
 Una definición global puede ser:
Lista de variables.
Nombre de la
estructura.
Lista de campos
miembros.
Referencia a campos
miembros.
Array de estructuras.
Compilador C++ Microsoft 9.0
C/C++ Punteros. Dirección. In dirección. Aritmética de direcciones.
Estructuras
 Una definición más elaborada:
 Para usar …
 Salida:
 Acta: 123 Codigo de Materia: 43 Fecha:14/09/2009
 A-1613/8 Apellido, Nombre calle, nro, piso, ... Nota:8.25 Compilador C++ Microsoft 9.0
C/C++ Punteros. Dirección. In dirección. Aritmética de direcciones.
Punteros a Estructuras
Formas de
inicializar.
Array de
Punteros.
Uso de
Punteros.
Cálculo de
tamaños.
Salida.
C/C++ Punteros. Dirección. In dirección. Aritmética de direcciones.
Punteros a Punteros a
Estructuras
 Más ejemplos.
Salida.
Punteros.
Direcciones.
Valores.
C/C++ Punteros. Dirección. In dirección. Aritmética de direcciones.
Punteros a Funciones.
 Sintaxis:
 <tipo_devuelto> ... (* nombre_puntero) (<parametros>) ...
 <tipo_devuelto> es el tipo de vuelto por la función señalada por el puntero,
podríamos decir que es el tipo de variable señalada por el puntero en último
extremo. Puede ser void.
 (* nombre_puntero) Esta parte es conocida como núcleo de la declaración.
Sin los paréntesis de la declaración, cambia su sentido, ya que es
considerada por el compilador como la declaración de una función.
 <parametros> es la lista de los argumentos aceptados por la función
señalada por el puntero.
C/C++ Punteros. Dirección. In dirección. Aritmética de direcciones.
Punteros a Funciones. Ejemplos.

Mais conteúdo relacionado

Semelhante a Punteros_v2.ppt

Repaso de Sistemas Numéricos y Códigos
Repaso de Sistemas Numéricos y CódigosRepaso de Sistemas Numéricos y Códigos
Repaso de Sistemas Numéricos y CódigosMario Bressano
 
Sistemas de numeración
Sistemas de numeraciónSistemas de numeración
Sistemas de numeraciónmanuel59
 
Cesar tecnologia
Cesar tecnologiaCesar tecnologia
Cesar tecnologia110818
 
Representación digital de datos
Representación digital de datosRepresentación digital de datos
Representación digital de datosADRIAN CASTAÑEDA
 
Repaso conversion numerica
Repaso conversion numericaRepaso conversion numerica
Repaso conversion numericaNombre Apellidos
 
Repaso conversion numerica
Repaso conversion numericaRepaso conversion numerica
Repaso conversion numericaEduardo Campazzo
 
Repaso conversion numerica
Repaso conversion numericaRepaso conversion numerica
Repaso conversion numericaEduardo Campazzo
 
Matlab presentacion enero2012
Matlab presentacion enero2012Matlab presentacion enero2012
Matlab presentacion enero2012gerardoarbito
 
Dii2+Representacion+De+La+Informaci%C3%B3n+Y+Codigos+Corregido
Dii2+Representacion+De+La+Informaci%C3%B3n+Y+Codigos+CorregidoDii2+Representacion+De+La+Informaci%C3%B3n+Y+Codigos+Corregido
Dii2+Representacion+De+La+Informaci%C3%B3n+Y+Codigos+CorregidoLuis Pallazhco Castro
 
SISTEMAS DE NUMERACIÓN
SISTEMAS DE NUMERACIÓNSISTEMAS DE NUMERACIÓN
SISTEMAS DE NUMERACIÓNESPOCH
 
Introduccion al lenguaje c_EderHenriquez
Introduccion al lenguaje c_EderHenriquezIntroduccion al lenguaje c_EderHenriquez
Introduccion al lenguaje c_EderHenriquezederhenriquez
 
Dii2+Representacion+De+La+Informaci%C3%B3n+Y+Codigos+Corregido
Dii2+Representacion+De+La+Informaci%C3%B3n+Y+Codigos+CorregidoDii2+Representacion+De+La+Informaci%C3%B3n+Y+Codigos+Corregido
Dii2+Representacion+De+La+Informaci%C3%B3n+Y+Codigos+CorregidoMENOSCAL
 
Referencias MATLAB
Referencias MATLABReferencias MATLAB
Referencias MATLABOmar Sanchez
 
Trabajo programacion 1 jose silva
Trabajo programacion 1 jose silvaTrabajo programacion 1 jose silva
Trabajo programacion 1 jose silvaJhosse Ant Siilva
 

Semelhante a Punteros_v2.ppt (20)

Repaso de Sistemas Numéricos y Códigos
Repaso de Sistemas Numéricos y CódigosRepaso de Sistemas Numéricos y Códigos
Repaso de Sistemas Numéricos y Códigos
 
Sistemas de numeración
Sistemas de numeraciónSistemas de numeración
Sistemas de numeración
 
Cesar tecnologia
Cesar tecnologiaCesar tecnologia
Cesar tecnologia
 
Representación digital de datos
Representación digital de datosRepresentación digital de datos
Representación digital de datos
 
Repaso conversion numerica
Repaso conversion numericaRepaso conversion numerica
Repaso conversion numerica
 
Repaso conversion numerica
Repaso conversion numericaRepaso conversion numerica
Repaso conversion numerica
 
Repaso conversion numerica
Repaso conversion numericaRepaso conversion numerica
Repaso conversion numerica
 
Matlab presentacion enero2012
Matlab presentacion enero2012Matlab presentacion enero2012
Matlab presentacion enero2012
 
Dii2+Representacion+De+La+Informaci%C3%B3n+Y+Codigos+Corregido
Dii2+Representacion+De+La+Informaci%C3%B3n+Y+Codigos+CorregidoDii2+Representacion+De+La+Informaci%C3%B3n+Y+Codigos+Corregido
Dii2+Representacion+De+La+Informaci%C3%B3n+Y+Codigos+Corregido
 
SISTEMAS DE NUMERACIÓN
SISTEMAS DE NUMERACIÓNSISTEMAS DE NUMERACIÓN
SISTEMAS DE NUMERACIÓN
 
Aritmética de Computadores
Aritmética de ComputadoresAritmética de Computadores
Aritmética de Computadores
 
Lenguaje c
Lenguaje cLenguaje c
Lenguaje c
 
Diapositivas
DiapositivasDiapositivas
Diapositivas
 
Programas
Programas Programas
Programas
 
1. vers. cap-3_tipos_dedatos
1. vers. cap-3_tipos_dedatos1. vers. cap-3_tipos_dedatos
1. vers. cap-3_tipos_dedatos
 
1. vers. cap-3_tipos_dedatos
1. vers. cap-3_tipos_dedatos1. vers. cap-3_tipos_dedatos
1. vers. cap-3_tipos_dedatos
 
Introduccion al lenguaje c_EderHenriquez
Introduccion al lenguaje c_EderHenriquezIntroduccion al lenguaje c_EderHenriquez
Introduccion al lenguaje c_EderHenriquez
 
Dii2+Representacion+De+La+Informaci%C3%B3n+Y+Codigos+Corregido
Dii2+Representacion+De+La+Informaci%C3%B3n+Y+Codigos+CorregidoDii2+Representacion+De+La+Informaci%C3%B3n+Y+Codigos+Corregido
Dii2+Representacion+De+La+Informaci%C3%B3n+Y+Codigos+Corregido
 
Referencias MATLAB
Referencias MATLABReferencias MATLAB
Referencias MATLAB
 
Trabajo programacion 1 jose silva
Trabajo programacion 1 jose silvaTrabajo programacion 1 jose silva
Trabajo programacion 1 jose silva
 

Punteros_v2.ppt

  • 1. C/C++ Punteros. Dirección. In dirección. Aritmética de direcciones. Índice.  Revisando conceptos acerca de la memoria.  Las variables en los programas.  Punteros y direcciones.  Aritmética de punteros.  Estructuras y Uniones.  Extendiendo los conceptos a funciones.
  • 2. C/C++ Punteros. Dirección. In dirección. Aritmética de direcciones.  La memoria es un conjunto de celdas contiguas donde se almacenan datos.  La unidad de memoria más pequeña es el bit.  El byte es un conjunto de 8 bits. Unidad de memoria.  El lugar (ubicación) de cada byte es único y es su dirección.  Si los bytes son consecutivos la dirección se ira incrementando secuencialmente.  Cada celda tiene dos valores asociados: Dirección y Contenido. Memoria. 1 2 3 4 5 6 7 8 9 A B C D E F 1 0 1 1 0 0 1 1 171 186 137 99 10101011 10111010 10001001 1100011 Dirección:0xC100 Dirección +1: 0xC101 Dirección + 3: 0xC103 Celda: Valor Decimal Celda: Valor Binario
  • 3. C/C++ Punteros. Dirección. In dirección. Aritmética de direcciones. Variables  Una variable es una porción de memoria identificada por un nombre.  El tipo de dato define su representación binaria y longitud.  Tiene tres valores asociados: Nombre, Contenido y Dirección.  Declaramos: “int n=1523, m=121;”  Contenido:  n  1523  m  121  Dirección:  &n  C102  &m  C100  Es contenido binario se codifica (bits) de acuerdo al tipo de variable. 0000000 01111001 00000101 11110011 Dirección: C100 Dirección: C102 Valor: 121 Valor: 1523
  • 4. C/C++ Punteros. Dirección. In dirección. Aritmética de direcciones. Tipos de Variables  El tipo de variable establece:  Rango de valores que maneja.  Codificación binaria del dato.  Cantidad de memoria requerida.  En todos los casos la dirección de almacenaje es “&variable”. Declaración Bytes Valor en Memoria Hexa Valor en Memoria Binario char c = ‘X’; 1 58 1011000 char w[ ] = “hola”; 4+1 68 6F 6C 61 00 01101000 01101111 01101100 01100001 00000000 int n[5] = {555,444,333,222,111} 5x2=10 02 2B 01 BC 01 4D 00 DE 00 6F 00000010 00101011 00000001 10111100 00000001 01001101 00000000 11011110 00000000 01101111 long l[3] = {100,200,300} 3x4=12 00 00 00 64 00 00 00 C8 00 00 01 2C 00000000 00000000 00000000 01100100 00000000 00000000 00000000 11001000 00000000 00000000 00000001 00101100 float f = 3.141592 4 40 49 0F D8 1000000010010010000111111011000
  • 5. C/C++ Punteros. Dirección. In dirección. Aritmética de direcciones. Punteros  Un puntero es una variable cuyo contenido es una dirección.  Como todas las variable tiene nombre, contenido y dirección.  Un puntero “apunta a”: un dato, un array, un objeto, una función, etc.  “int n;” declara una variable entera (16 bits / 2 bytes)  “int *j;” declara un puntero tipo entero (solo almacena direcciones).  “j” contiene una dirección donde comienza un entero.  “*j” valor entero almacenado en la dirección apuntada por “j” (indirección).  n  contenido=“valor del entero” j  contenido=“valor de la dirección”.  &n  dirección del entero en “n” *j  contenido en la dirección de “j”. Valor *j=n  40 j0xA010 Dirección: &j0xF234 Dirección: j  &n 0xA010 Lugar: 2 byte donde esta almacenado j Lugar: 2 byte donde esta almacenado n Representamos “int n=40, *j=&n;” suponemos que se almacenan: n en la dirección 0xA010 y j en la dirección 0xF234
  • 6. C/C++ Punteros. Dirección. In dirección. Aritmética de direcciones. Algebra de punteros  Los punteros se usan como cualquier otra variable.  Su comportamiento es de acuerdo al tipo definido.  “long n[ ]={40,30,20,10}, *j=n;”  j se inicializa con &n[0]  j  &n[0]  0xA010  *j =40  j++  &n[1]  0xA014  *j =30  j+2  &n[3]  0xA01C  *j =10  Si hacemos j=n; *(j+2)  n[2]  20  Valor apuntado por j más 2 posiciones  Como j es tipo long incrementará 8 (4*2) bytes  El incremento depende del tipo.  j Tiene un lugar de memoria para su contenido.  j esta almacenada en &j, ocupa 8/16/32/64 bits de acuerdo al micro. 40 30 20 10 Dirección: 0xA010 Dirección +4 0xA014 Dirección + 12 0xA01C
  • 7. C/C++ Punteros. Dirección. In dirección. Aritmética de direcciones.  Un puntero puede almacenar una dirección de otro puntero.  El valor final apuntado puede obtenerse en forma directa.  “int n, *j, **p”; hacemos “n=4562”; “j=&n”; “p=&j”;  Supongamos que:  &n 0x3021  &j  0x4310 Entonces:  &p 0x4F02  Interpretación:  Con el valor de p obtiene la dirección de j: *p &j  Con el valor de j obtiene la dirección de n: *j &n  Con el tipo de p interpreta el valor de n.  Esta es la secuencia de  **p Punteros de Punteros p  0x4310 *p  j  0x3021 **p  *j  4562 *(*(p))  4562 *( j )  4562 n  4562
  • 8. C/C++ Punteros. Dirección. In dirección. Aritmética de direcciones. Punteros de Punteros **p=*j=n 4562 *p=j 0x3021 p 0x4310 *p=j  0x3021 p0x4310 Dirección: &p0x4F02 Dirección: &j=p0x4310 Lugar: 2 byte donde esta almacenado p Lugar: 2 byte donde esta almacenado j Representación gráfica de doble indirección **p=*j=n  4562 Dirección: &n=j0x3021 Lugar: 2 byte donde esta almacenado n int n= 4562; &n  0x3021 int *j = &n; &j  0x4310 int **p =&j; &p  0x4F02
  • 9. C/C++ Punteros. Dirección. In dirección. Aritmética de direcciones. Uso de Punteros  Ejemplo de un código, asignación y uso de punteros. A p se le asigno la dirección 0x14E A j se le asigno la dirección 0x130 A a1 se le asigno la dirección 0x1902 Compilador C (CodeWarrior)
  • 10. C/C++ Punteros. Dirección. In dirección. Aritmética de direcciones. Uso de Punteros  Como obtiene el valor de **p. Toma la dirección de p 0x14E Compilador C (CodeWarrior)
  • 11. C/C++ Punteros. Dirección. In dirección. Aritmética de direcciones. Uso de Punteros  Sumemos “p += 2;”. El valor de **p queda. Toma la dirección de p 0x14E Compilador C (CodeWarrior)
  • 12. C/C++ Punteros. Dirección. In dirección. Aritmética de direcciones. Introducción a Estructuras  Cuando definimos arreglos agrupamos datos del mismo tipo.  “int dni[40], *pv=dni;”  Asignará 40 * 2 = 80 bytes contiguos para almacenar los 40 enteros  Con pv puedo navegar sobre el arreglo (array).  Si necesito asociar varios tipos de datos de una misma entidad (Registro)  Ejemplo: Registro de exámenes de un turno:  Acta, Fecha, Materia, Legajo, Nombre, Nota.  Necesito 6 arreglos para los siete tipos de datos.  Cada arreglo esta en posiciones de memorias no vinculadas entre si.  Agregar una entidad implica hacerlo en cada uno y luego rescatar cada dato del lugar y posición adecuadas.  Para introducir el concepto de registro, debemos definir un nuevo tipo de datos (nuestro), que maneje los seis valores “juntos”, asociados y agrupados.
  • 13. C/C++ Punteros. Dirección. In dirección. Aritmética de direcciones. Estructuras  Una definición global puede ser: Lista de variables. Nombre de la estructura. Lista de campos miembros. Referencia a campos miembros. Array de estructuras. Compilador C++ Microsoft 9.0
  • 14. C/C++ Punteros. Dirección. In dirección. Aritmética de direcciones. Estructuras  Una definición más elaborada:  Para usar …  Salida:  Acta: 123 Codigo de Materia: 43 Fecha:14/09/2009  A-1613/8 Apellido, Nombre calle, nro, piso, ... Nota:8.25 Compilador C++ Microsoft 9.0
  • 15. C/C++ Punteros. Dirección. In dirección. Aritmética de direcciones. Punteros a Estructuras Formas de inicializar. Array de Punteros. Uso de Punteros. Cálculo de tamaños. Salida.
  • 16. C/C++ Punteros. Dirección. In dirección. Aritmética de direcciones. Punteros a Punteros a Estructuras  Más ejemplos. Salida. Punteros. Direcciones. Valores.
  • 17. C/C++ Punteros. Dirección. In dirección. Aritmética de direcciones. Punteros a Funciones.  Sintaxis:  <tipo_devuelto> ... (* nombre_puntero) (<parametros>) ...  <tipo_devuelto> es el tipo de vuelto por la función señalada por el puntero, podríamos decir que es el tipo de variable señalada por el puntero en último extremo. Puede ser void.  (* nombre_puntero) Esta parte es conocida como núcleo de la declaración. Sin los paréntesis de la declaración, cambia su sentido, ya que es considerada por el compilador como la declaración de una función.  <parametros> es la lista de los argumentos aceptados por la función señalada por el puntero.
  • 18. C/C++ Punteros. Dirección. In dirección. Aritmética de direcciones. Punteros a Funciones. Ejemplos.