Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Punteros v2
Punteros v2
Í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.
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.
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.
Algebra de punteros
Los punteros se usan como cualquier otra variable.
Su comportamiento es de acuerdo al tipo definido.
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
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
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
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).
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
Nombre de la
Una definición global puede ser: estructura.
Lista de campos
miembros.
Lista de variables.
Referencia a campos
miembros.
Array de estructuras.
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.
Punteros.
Direcciones.
Valores.
Salida.
C/C++ Punteros. Dirección. In dirección. Aritmética de direcciones.
Punteros a Funciones.
Sintaxis:
<tipo_devuelto> ... (* nombre_puntero) (<parametros>) ...