Documentos de Académico
Documentos de Profesional
Documentos de Cultura
051766558335/virtualeducation/56/contenidos/414/TEMA 2 Punteros v2
051766558335/virtualeducation/56/contenidos/414/TEMA 2 Punteros v2
LENGUAJES DE PROGRAMACION
PUNTEROS EN C Y C++
BAMBAMARCA 2020
Í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.
1
C/C++ Punteros. Dirección. In dirección. Aritmética de direcciones.
Memoria.
◼ La memoria es un conjunto de celdas contiguas donde se almacenan datos.
1 2 3 4 5 6 7 8 9 A B C D E F
Dirección:0xC100
Dirección + 3: 0xC103
Dirección +1: 0xC101
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.
◼ Contenido:
0000000 01111001 00000101 11110011
◼ n 1523
◼ m 121
◼ Dirección: Dirección: C100 Dirección: C102
◼ &n C102
◼ &m C100
2
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.
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.
3
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.
*(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.
Punteros de Punteros
◼ 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 p 0x4310
◼ &j 0x4310 Entonces: *p j 0x3021
◼ &p 0x4F02 **p *j 4562
◼ Interpretación:
◼ Con el valor de p obtiene la dirección de j: *p &j *(*(p)) 4562
◼ Con el valor de j obtiene la dirección de n: *j &n
◼ Con el tipo de p interpreta el valor de n. *( j ) 4562
◼ Esta es la secuencia de ➔ **p
n 4562
4
C/C++ Punteros. Dirección. In dirección. Aritmética de direcciones.
Punteros de Punteros
Representación gráfica de doble indirección
p0x4310
Lugar: 2 byte donde
esta almacenado j
Dirección: &p0x4F02
*p=j 0x3021
**p=*j=n 4562
**p=*j=n 4562
*p=j 0x3021
Dirección: &n=j0x3021
p 0x4310
Uso de Punteros
◼ Ejemplo de un código, asignación y uso de punteros.
A p se le asigno la dirección 0x14E
Compilador C (CodeWarrior)
5
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)
Uso de Punteros
◼ Sumemos “p += 2;”. El valor de **p queda.
Toma la dirección de p 0x14E
Compilador C (CodeWarrior)
6
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).
◼ Agregar una entidad implica hacerlo en cada uno y luego rescatar cada dato del
lugar y posición adecuadas.
Estructuras
Nombre de la
◼ Una definición global puede ser: estructura.
Lista de campos
miembros.
Lista de variables.
Referencia a campos
miembros.
Array de estructuras.
7
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
Punteros a Estructuras
Formas de
inicializar.
Array de
Punteros.
Uso de
Punteros.
Cálculo de
tamaños.
Salida.
8
C/C++ Punteros. Dirección. In dirección. Aritmética de direcciones.
Punteros a Punteros a
Estructuras
◼ Más ejemplos.
Punteros.
Direcciones.
Valores.
Salida.
Punteros a Funciones.
◼ Sintaxis:
◼ <tipo_devuelto> ... (* nombre_puntero) (<parametros>) ...
9
C/C++ Punteros. Dirección. In dirección. Aritmética de direcciones.
10